推荐学习地址:http://www.cnblogs.com/cyjb/p/UnionFindSets.html
简单:
1 #include<cstdio> 2 const int N=1001; 3 int f[N]; 4 void init(int n){ 5 for(int i=1;i<=n;++i) 6 f[i]=i; 7 } 8 int fin(int x){ 9 if(x!=f[x])f[x]=fin(f[x]); 10 return f[x]; 11 } 12 void uni(int x,int y){ 13 if((x=fin(x))==(y=fin(y)))return; 14 else f[x]=y; 15 } 16 int main(){ 17 int t,i,n,m,a,b,ans; 18 scanf("%d",&t); 19 while(t--){ 20 scanf("%d%d",&n,&m); 21 init(n); 22 while(m--){ 23 scanf("%d%d",&a,&b); 24 uni(a,b); 25 } 26 ans=0; 27 for(i=1;i<=n;++i) 28 if(f[i]==i) 29 ans++; 30 printf("%d\n",ans); 31 } 32 }