HDU1856 More is better(并查集)

来源:互联网 发布:mac视频暂停快捷键 编辑:程序博客网 时间:2024/05/29 04:41

题意:

王老师要找一些男生帮助他完成一项工程。要求最后挑选出的男生之间都是朋友关系,可以说直接的,也可以是间接地。问最多可以挑选出几个男生(最少挑一个)。

要点:

并查集水题,只要求那个集合中个数最大即可,就是数据比较大,所以rank数组就不开了。


166989032016-03-28 11:24:07Accepted1856374MS79996K661 BC++seasonal

#include<stdio.h>#include<string.h>#include<stdlib.h>#define maxn 10000000int p[maxn], num[maxn];void init(){for (int i = 1; i <= maxn; ++i){p[i] = i;num[i] = 1;}}int find(int x){if (p[x] == x) return x;return p[x] = find(p[x]);}void merge(int x, int y){x = find(x);y = find(y);if (x == y) return;p[x] = y;num[y] += num[x];}int main(){int n,x,y;while (scanf("%d", &n) != EOF){init();while (n--){scanf("%d%d", &x, &y);merge(x, y);}int max = -1;for (int i = 1; i <= maxn; i++)if (num[i] > max)max = num[i];printf("%d\n", max);}}


0 0
原创粉丝点击