HDU 1232 并查集
以前做过的一个题,今天又做了一次。
1 #include<stdio.h> 2 #include<string.h> 3 #define maxn 2000 4 5 int u[maxn],v[maxn],bin[maxn]; 6 int find(int x) 7 { 8 return bin[x]==x?x:(bin[x]=find(bin[x])); 9 }; 10 11 int main() 12 { 13 int n,m,i,sum,x,y; 14 while(~scanf("%d",&n)&&n) 15 { 16 sum=n-1; 17 scanf("%d",&m); 18 for(i=1; i<=m; i++) 19 scanf("%d%d",&u[i],&v[i]); 20 21 for(i=1; i<=n; i++) 22 bin[i]=i; 23 for(i=1; i<=m; i++) 24 { 25 x=find(u[i]); y=find(v[i]); 26 if(x!=y) 27 { 28 sum--; 29 bin[x]=y; 30 } 31 } 32 printf("%d\n",sum); 33 } 34 }