BZOJ1596: [Usaco2008 Jan]电话网络

Posted ONION_CYC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ1596: [Usaco2008 Jan]电话网络相关的知识,希望对你有一定的参考价值。

【算法】树上贪心

【题解】

因为一个点必须被覆盖,那么它如果没有被子树节点覆盖的话,就覆盖它的父节点

从叶子开始贪心。

注意,如果它自己已经被选了就不需要选父节点了。

技术分享
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cctype>
using namespace std;
const int maxn=10010;
struct edge{int v,from;}e[maxn*3];
int first[maxn],n,tot,ans,g[maxn];

int read()
{
    char c;int s=0,t=1;
    while(!isdigit(c=getchar()))if(c==-)t=-1;
    do{s=s*10+c-0;}while(isdigit(c=getchar()));
    return s*t;
}
void insert(int u,int v)
{tot++;e[tot].v=v;e[tot].from=first[u];first[u]=tot;}
void dfs(int x,int fa){
    bool ok=0;
    for(int i=first[x];i;i=e[i].from)if(e[i].v!=fa){
        dfs(e[i].v,x);
        if(g[e[i].v])ok=1;
    }
    if(!ok&&!g[x]&&!g[fa])g[fa]=1,ans++;
}    
int main(){
    n=read();
    int u,v;
    for(int i=1;i<n;i++){
        u=read();v=read();
        insert(u,v);insert(v,u);
    }
    ans=0;
    dfs(1,1);
    printf("%d",ans);
    return 0;
}
View Code

 

以上是关于BZOJ1596: [Usaco2008 Jan]电话网络的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ1596: [Usaco2008 Jan]电话网络

bzoj 1596: [Usaco2008 Jan]电话网络贪心

[bzoj 1596][Usaco2008 Jan]电话网络

bzoj1596/Usaco2008 Jan电话网络——dfs

树形DPBZOJ1596-[Usaco2008 Jan]电话网络

BZOJ 1596--电话网络(树形DP)