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 }
View Code

 

posted @ 2013-05-23 08:36  水门  阅读(165)  评论(0编辑  收藏  举报