HDOJ 1213 How Many Tables 杭电 ACM

比1232更原始的并查集

#include
int t,m,n,i,p[1001],a,b,cnt;
int rt(int x){return p[x]==x?x:rt(p[x]);}
void f(int a,int b){
    int x=rt(a),y=rt(b);
    if(x!=y)p[x]=y;
}
int main(){
    scanf("%d",&t);
    while(t--){
        scanf("%d%d",&n,&m);
        for(i=1;i<=n;++i)p[i]=i;
        while(m--)scanf("%d%d",&a,&b),f(a,b);
        for(cnt=0,i=1;i<=n;++i)
            if(p[i]==i)cnt++;
        printf("%d\n",cnt);
    }
}


你可能感兴趣的:(HDOJ,ACM)