题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232
很简单的并查集了。。。。。。。
代码:
1 #include<cstdio> 2 #include<cstdio> 3 using namespace std; 4 const int MAXN=1010; 5 int F[MAXN]; 6 int Find(int t) 7 { 8 if(F[t]==-1) return t; 9 return F[t]=Find(F[t]); 10 } 11 void Union(int r1,int r2) 12 { 13 int R1=Find(r1); 14 int R2=Find(r2); 15 if(R1!=R2) F[R1]=R2; 16 } 17 int main() 18 { 19 int n,m; 20 21 while(scanf("%d",&n),n) 22 { 23 scanf("%d",&m); 24 for(int i=1;i<=n;i++) F[i]=-1; 25 int a,b; 26 while(m--) 27 { 28 scanf("%d%d",&a,&b); 29 Union(a,b); 30 } 31 int ans=0; 32 for(int i=1;i<=n;i++) 33 if(F[i]==-1) ans++; 34 printf("%d ",ans-1); 35 } 36 return 0; 37 }