Time Limit: 1000MS | Memory Limit: 20000K | |
Total Submissions: 19754 | Accepted: 9576 |
Description
Input
Output
Sample Input
100 4 2 1 2 5 10 13 11 12 14 2 0 1 2 99 2 200 2 1 5 5 1 2 3 4 5 1 0 0 0
Sample Output
4 1 1
Source
1 #include<stdio.h> 2 #include<string.h> 3 #define maxn 30000 4 int n,m; 5 int father[maxn],rank[maxn]; 6 void init() 7 { 8 for(int i=0;i<n;i++) 9 { 10 father[i]=i; 11 rank[i]=1; 12 } 13 } 14 int setfind(int x) 15 { 16 if(x!=father[x]) 17 x=setfind(father[x]); 18 return x; 19 20 } 21 void _union(int a,int b) 22 { 23 a=setfind(a); 24 b=setfind(b); 25 if(a!=b) 26 { 27 if(rank[a]<rank[b]) 28 { 29 father[a]=b; 30 rank[b]+=rank[a]; 31 } 32 else 33 { 34 father[b]=a; 35 rank[a]+=rank[b]; 36 } 37 } 38 } 39 int main() 40 { 41 int a,b,c; 42 while(scanf("%d%d",&n,&m),m+n) 43 { 44 init(); 45 while(m--) 46 { 47 scanf("%d %d",&a,&b); 48 while(a>1) 49 { 50 scanf("%d",&c); 51 _union(b,c); 52 b=c; 53 a--; 54 } 55 } 56 printf("%d\n",rank[setfind(0)]); 57 } 58 59 return 0; 60 }
原文:http://www.cnblogs.com/gongxijun/p/3527346.html