题解 | #连通图#

连通图

https://www.nowcoder.com/practice/569e89823a5141fe8a11ab7d4da21edf

#include <iostream>
#include <sys/types.h>
using namespace std;

const int MAXN = 1000+10;
int father[MAXN];
int height[MAXN];

void Initial(int n){
    for(int i=0;i<n;i++){
        father[i] = i;
        height[i] = 0;
    }
}
int Find(int n){
    if(n!=father[n]){
        father[n] = Find(father[n]);
    }
    return father[n];
}
void Union(int a,int b){
    a = Find(a);
    b = Find(b);
    if(a!=b){
        if(height[a]<height[b]){
            father[a] = b;
        }else if(height[a]>height[b]){
            father[b] = a;
        }else{
            father[b] = a;
            height[a]++;
        }
    }
}
int main() {
    int n,m;
    while(cin>>n>>m){
        if(n==0 && m==0){
            break;
        }
        Initial(n);
        for(int i=0;i<m;i++){
            int a,b;
            cin>>a>>b;
            Union(a,b);
        }
        int ans = 0;
        for(int i=2;i<=n;i++){
            if(Find(i)!=Find(i-1)){
                cout<<"NO"<<endl;
                break;
            }else{
                ans++;
            }
        }
        if(ans==n-1){
            cout<<"YES"<<endl;
        }
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务