标签:
Time Limit: 1000MS | Memory Limit: 20000K | |
Total Submissions: 26945 | Accepted: 13165 |
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 <cstdio> 2 #include <iostream> 3 using namespace std; 4 int father[30030], num[30030]; 5 int i, n; 6 7 void init() 8 { 9 for(i=0; i<n; i++) 10 { 11 father[i] = i; num[i] = 1; 12 } 13 } 14 int find(int a) 15 { 16 int r, j, k; 17 r = a; 18 while(r != father[r]) 19 r = father[r]; 20 j = a; 21 while(j != r) 22 { 23 k = father[j]; 24 father[j] = r; 25 j = k; 26 } 27 return r; 28 } 29 void mercy(int a, int b) 30 { 31 int q = find(a); 32 int p = find(b); 33 if(q != p) 34 { 35 father[q] = p; 36 num[p] += num[q]; 37 } 38 } 39 int main() 40 { 41 int i, t, m, dir, dy; 42 while(~scanf("%d %d", &n, &m)) 43 { 44 if(n == 0 && m == 0) 45 break; 46 if(m == 0) //被怀疑, 至少有一个; 47 { 48 printf("1\n"); 49 continue; 50 } 51 init(); 52 while(m--) 53 { 54 scanf("%d", &t); 55 scanf("%d", &dir); 56 for(i=1; i<t; i++) 57 { 58 scanf("%d", &dy); 59 mercy(dir, dy); 60 } 61 } 62 int temp = find(0); 63 printf("%d\n", num[temp]); 64 } 65 return 0; 66 }
标签:
原文地址:http://www.cnblogs.com/fengshun/p/4697116.html