首页 > 代码库 > HDU 1856 More is better

HDU 1856 More is better

 http://acm.hdu.edu.cn/showproblem.php?pid=1856

题意:

王先生想要一些男孩帮助他做一个项目。因为项目相当复杂,男孩越多,越好。当然有一定的要求。
王先生选择了一个足够大的房间来容纳男孩。没有被选中的男孩必须立即离开房间。有10000000的男孩在房间号从1到10000000在一开始。王先生选择后,仍然在这个房间里的任何两个人应该是朋友(直接或间接),或者只剩下一个男孩。给定所有的直接朋友对,你应该决定最好的方法。

 

思路:

并查集。选出顶点数最多的并输出。

 1 #include<iostream>  2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5  6 #define N 10000000 7  8 int p[N], num[N], maxd; 9 10 void init()11 {12     int i;13     for (i = 1; i <= N; i++)14     {15         p[i] = i;16         num[i] = 1;17     }18 }19 20 int find(int x) 21 {22     if (p[x] != x)23         p[x] = find(p[x]);24     return p[x];25 }26 27 void merge(int a, int b)28 {29     int x = find(a);30     int y = find(b);31     if (x != y)32     {33         p[x] = y;34         num[y] += num[x];35         maxd = max(maxd, num[y]);36     }37 }38 39 int main()40 {41     //freopen("D:\\txt.txt", "r", stdin);42     int n, a, b;43     while (~scanf("%d", &n))44     {45         if (n == 0)46         {47             printf("1\n");48             continue;49         }50         maxd = 0;51         init();52         for (int i = 0; i<n; i++)53         {54             scanf("%d%d", &a, &b);55             merge(a, b);56         }57         printf("%d\n", maxd);58     }59     return 0;60 }

 

HDU 1856 More is better