样例国 0WA 求调
查看原帖
样例国 0WA 求调
370820
封禁用户楼主2023/5/17 20:08

rt.

#include <bits/stdc++.h>
using namespace std;
int n,m,fa[100005];
int cnt;
int x,y;
int find(int x){
    if(fa[x]==x){
        return x;
    }
    else{
        int t=find(fa[x]);
        fa[x]=t;
        return t;
    }
}
bool merge(int x, int y){
    int f1=fa[x];
    int f2=fa[y];
    if(f1==f2){
        return false;
    }
    fa[f2]=f1;
    return true;
}
inline void init(){
    for(int i=1;i<=n;i++){
        fa[i]=i;
    }
}
int main(){
    while(cin>>n){
        cnt=0;
        if(n==0){
            break;
        }
        cin>>m;
        init();
        for(int i=1;i<=m;i++){
            cin>>x>>y;
            merge(x,y);
        }
        for(int i=1;i<=n;i++){
            if(fa[i]==i){
                cnt++;
            }
        }
        cout<<cnt-1<<endl;
    }
    return 0;
}

2023/5/17 20:08
加载中...