http://acm.split.hdu.edu.cn/showproblem.php?pid=1213
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include<stdio.h> 2 #include<algorithm> 3 #include<iostream> 4 #include<string.h> 5 using namespace std; 6 const int maxn=1005; 7 int fa[maxn]; 8 int fin(int x) 9 { 10 return fa[x]==x?fa[x]:fa[x]=fin(fa[x]); 11 } 12 int unin(int x,int y){ 13 return fa[fin(y)]=fin(x); 14 } 15 int main() 16 { 17 int t,a,b; 18 int m,n; 19 cin>>t; 20 while(t--){ 21 cin>>m>>n; 22 for(int i=1;i<=m;i++){ 23 fa[i]=i; 24 } 25 for(int i=0;i<n;i++){ 26 scanf("%d%d",&a,&b); 27 if(fin(a)!=fin(b)){ 28 unin(a,b); 29 } 30 } 31 32 int temp=0; 33 for(int i=1;i<=m;i++){ 34 if(fa[i]==i){ 35 temp++; 36 } 37 } 38 cout<<temp<<endl; 39 getchar(); 40 } 41 }