POJ 1611 The Suspects(并查集)
题目描述难懂。简单一句话,找和0在一个集合的。
1 #include <stdio.h> 2 #include <string.h> 3 int p[30001]; 4 int find(int x) 5 { 6 int t,r; 7 r = x; 8 while(x != p[x]) 9 { 10 x = p[x]; 11 } 12 while(r != x) 13 { 14 t = p[r]; 15 p[r] = x; 16 r = t; 17 } 18 return x; 19 } 20 void merge(int x,int y) 21 { 22 x = find(x); 23 y = find(y); 24 if(x != y) 25 p[x] = y; 26 } 27 int main() 28 { 29 int n,m,sv,ev,str,i,j,k,num; 30 while(scanf("%d%d",&n,&m)!=EOF) 31 { 32 if(!n && !m) break; 33 for(i = 0;i <= n-1;i ++) 34 { 35 p[i] = i; 36 } 37 for(i = 1;i <= m;i ++) 38 { 39 scanf("%d",&k); 40 scanf("%d",&sv); 41 for(j = 2;j <= k;j ++) 42 { 43 scanf("%d",&ev); 44 merge(sv,ev); 45 } 46 } 47 str = find(0); 48 num = 0; 49 for(i = 0;i <= n-1;i ++) 50 { 51 if(str == find(i)) 52 num ++; 53 } 54 printf("%d\n",num); 55 } 56 return 0; 57 }