hdu1856 More is better
http://acm.hdu.edu.cn/showproblem.php?pid=1856
并查集,集合计数
多加一个sum数组,统计集合元素个数,初始化为1
1 #include <stdio.h> 2 #define N 10001000 3 4 int n, f[N], sum[N], max = 1;//f-->father 5 6 int find(int x) 7 { 8 return x-f[x]? f[x]=find(f[x]): x; 9 } 10 11 void merge(int x, int y) 12 { 13 int r1, r2;//r-->root 14 r1 = find(x), r2 = find(y); 15 if(r1 != r2) 16 { 17 f[r1] = r2; 18 sum[r2] += sum[r1]; 19 if(sum[r2] > max) 20 { 21 max = sum[r2]; 22 } 23 } 24 } 25 26 int main() 27 { 28 int i, a, b; 29 while(~scanf("%d", &n)) 30 { 31 for(i=1; i < N; i++) 32 { 33 f[i] = i; 34 sum[i] = 1; 35 } 36 max = 1; 37 while(n-- && scanf("%d%d", &a, &b)) 38 { 39 merge(a,b); 40 } 41 printf("%d\n", max); 42 } 43 return 0; 44 }