HDU 1213并查集入门题

#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=1000+5;
int pa[maxn];

void init(int n){
    for(int i=0;i<=n;i++)
        pa[i]=i;
}

int findset(int x){
    if(pa[x]==x) return x;
    else return pa[x]=findset(pa[x]);
}

bool same(int x,int y){
    return findset(x)==findset(y);
}

void unite(int x,int y){
    x=findset(x);y=findset(y);
    if(x==y) return;
    pa[x]=y;
}

int main(){
    //freopen("datain.txt","r",stdin);
    int T,n,m;
    scanf("%d",&T);
    while(T--){
        scanf("%d%d",&n,&m);
        init(n);
        int x,y;
        for(int i=0;i<m;i++){
        scanf("%d%d",&x,&y);
        unite(x,y);
        }
        int cnt=0;
        for(int i=1;i<=n;i++){
            if(findset(i)==i)
            cnt++;
        }
        printf("%d\n",cnt);
    }
}

猜你喜欢

转载自blog.csdn.net/hanker99/article/details/88031108