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 }
原文地址:https://www.cnblogs.com/yuan1991/p/hdu1856.html