poj1611并查集

http://poj.org/problem?id=1611

 1 #include<stdio.h>
 2 int bin[30003],rank[30003];
 3 int find(int x)
 4 {
 5     int r=x;
 6     while(bin[r]!=r)
 7         r=bin[r];
 8     return r;
 9 }
10 void merge(int x,int y)
11 {
12     int fx,fy;
13     fx=find(x);
14     fy=find(y);
15     if(fx==fy)
16         return;
17     if(rank[fx]>rank[fy])
18     {
19         bin[fy]=fx;
20         rank[fx]=rank[fx]+rank[fy];
21     }
22     else
23     {
24         bin[fx]=fy;
25         rank[fy]=rank[fy]+rank[fx];
26     }
27 }
28 int main()
29 {
30     int n,m,i,j,t,a,b;
31     while(scanf("%d%d",&n,&m)==2)
32     {
33         if(m==0&&n==0)break;
34         for(i=0;i<n;i++)
35         {
36             bin[i]=i;
37             rank[i]=1;
38         }
39         for(i=0;i<m;i++)
40         {
41             scanf("%d%d",&t,&a);
42             for(j=1;j<t;j++)
43             {
44                 scanf("%d",&b);
45                 merge(a,b);
46             }
47 
48         }
49         printf("%d\n",rank[find(0)]);
50     }
51     return 0;
52 }
View Code

 

posted @ 2013-08-02 09:17  海东青飞吧!  阅读(140)  评论(0编辑  收藏  举报