题意:题意:一个人请人吃饭,相互认识的朋友在一张桌子,相互认识的朋友的意思是如果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;
}

 

相关文章:

  • 2021-12-26
  • 2021-05-20
  • 2021-12-19
  • 2022-12-23
  • 2021-05-10
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-08-12
  • 2021-08-30
  • 2022-12-23
  • 2022-12-23
  • 2022-01-22
  • 2021-08-14
相关资源
相似解决方案