hdu1213 并查集不压缩

Posted a_clown_cz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu1213 并查集不压缩相关的知识,希望对你有一定的参考价值。

题意:题意:一个人请人吃饭,相互认识的朋友在一张桌子,相互认识的朋友的意思是如果A认识B,B认识C,那么A、B、C是朋友,对于每组输入输出桌子的张数。

Sample Input
2 5 3 1 2 2 3 4 5 5 1 2 5
 
Sample Output
2 4

 

代码:

#include<iostream>
#include<cstdio>
using namespace std;

int a[1005];

int Find(int k){
    if(a[k]!=k) a[k]=Find(a[k]);
    return a[k];
}

int Union(int aa,int bb){
    return a[aa]=bb;
}

int main(){
    int T,n,m,x,y;
    cin>>T;
    while(T--){
        int ans=0;
        cin>>n>>m;
        for(int i=1; i<=n; i++)
            a[i]=i;
        for(int i=1; i<=m; i++){
            cin>>x>>y;
            int p=Find(x);
            int q=Find(y);
            if(p!=q) Union(p,q);
        }
        for(int i=1; i<=n; i++)
            if(a[i]==i) ans++;
        cout<<ans<<endl;
    }
    return 0;
}

 

以上是关于hdu1213 并查集不压缩的主要内容,如果未能解决你的问题,请参考以下文章

hdu1213 并查集(不压缩)

hdu 1213 How Many Tables(并查集)

HDU 1213(裸并查集)(无变形)

HDU 1213 How Many Tables(模板——并查集)

HDU - 1213 How Many Tables(并查集)

HDU - 1213 How Many Tables [并查集]