题目1109:连通图

来源:互联网 发布:网络信息安全协议书 编辑:程序博客网 时间:2024/05/02 04:21

// 判断最大集合里的结点个数是否等于n,若等于,则是连通图;否则,则不是连通图

// 最终还是考察并查集

#include<stdio.h>

#define N 1000
int Tree[N];
int sum[N];
int findRoot(int x){
    if(Tree[x]==-1) return x;
    else{
        int tmp=findRoot(Tree[x]);
        Tree[x]=tmp;
        return tmp;    
    }    
}
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF && n!=0){
        for(int i=1;i<=N;i++){
            Tree[i]=-1; sum[i]=1;    
        }    
        while(m--){
            int a,b;
            scanf("%d%d",&a,&b);
            a=findRoot(a);  b=findRoot(b);
            if(a!=b){
                Tree[a]=b; sum[b]+=sum[a];    
            }    
        }
        int ans=1;
        for(int i=1;i<=N;i++){
            if(Tree[i]==-1 && sum[i]>ans) ans=sum[i];    
        }
        if(ans==n) printf("YES\n");
        else printf("NO\n");
    }
    return 0;    
0 0
原创粉丝点击