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 }