hdu1232(跟前面某一题一样的啊)
1 #include <stdio.h> 2 3 using namespace std; 4 5 int set[1005]; 6 int sum; 7 void makeset(int n) 8 { 9 for(int i=1;i<=n;i++) 10 { 11 set[i]=i; 12 } 13 } 14 15 16 int findset(int x)//查 17 { 18 if(x!=set[x]) 19 { 20 set[x]=findset(set[x]);//之所以不可以直接返回是因为这里可能有多层的关系 21 } 22 return set[x]; 23 } 24 25 26 void Union(int a,int b)//并 27 { 28 int x=findset(a); 29 int y=findset(b); 30 if(x==y) 31 { 32 return ; 33 } 34 sum--; 35 set[y]=x; 36 } 37 38 39 int main() 40 { 41 int n,m; 42 while(1) 43 { 44 scanf("%d %d",&n,&m); 45 if(n==0) break; 46 sum=n-1; 47 makeset(n); 48 int first,second; 49 for(int i=0;i<m;i++) 50 { 51 scanf("%d %d",&first,&second); 52 Union(first,second); 53 } 54 printf("%d\n",sum); 55 } 56 return 0; 57 }
没有什么好说的,发现是这几天做的最简单的了