题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1213
简单的并查集
代码:
1 #include<iostream> 2 #include<cstdio> 3 #include<cstdlib> 4 #include<cstring> 5 #define maxn 1100 6 using namespace std; 7 8 int parent[maxn]; 9 int m,n; 10 int Find(int x) 11 { 12 int s; 13 for(s=x;parent[s]>=0;s=parent[s]); 14 return s; 15 } 16 void Union(int r1,int r2) 17 { 18 int R1=Find(r1); 19 int R2=Find(r2); 20 if(R1!=R2) parent[R1]=R2; 21 return ; 22 } 23 int main() 24 { 25 int t; 26 scanf("%d",&t); 27 while(t--) 28 { 29 scanf("%d%d",&n,&m); 30 int A,B; 31 for(int i=1;i<=n;i++) parent[i]=-1; 32 for(int i=1;i<=m;i++) 33 { 34 scanf("%d%d",&A,&B); 35 Union(A,B); 36 } 37 int ans=0; 38 for(int i=1;i<=n;i++) 39 if(parent[i]==-1) ans++; 40 cout<<ans<<endl; 41 } 42 return 0; 43 44 }