HDU1856 More is better(并查集)
2016-03-28 11:27
399 查看
题意:
王老师要找一些男生帮助他完成一项工程。要求最后挑选出的男生之间都是朋友关系,可以说直接的,也可以是间接地。问最多可以挑选出几个男生(最少挑一个)。
要点:
并查集水题,只要求那个集合中个数最大即可,就是数据比较大,所以rank数组就不开了。
王老师要找一些男生帮助他完成一项工程。要求最后挑选出的男生之间都是朋友关系,可以说直接的,也可以是间接地。问最多可以挑选出几个男生(最少挑一个)。
要点:
并查集水题,只要求那个集合中个数最大即可,就是数据比较大,所以rank数组就不开了。
16698903 | 2016-03-28 11:24:07 | Accepted | 1856 | 374MS | 79996K | 661 B | C++ | seasonal |
#include<stdio.h> #include<string.h> #include<stdlib.h> #define maxn 10000000 int 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); } }
相关文章推荐
- 一次app抓包引发的Android分析记录
- HDU 1103 Flo's Restaurant(模拟+优先队列)
- Windows驱动开发入门系列教程
- “并发用户数”、“系统用户数”和“同时在线用户数”的计算公式
- 数值与字符串之间的转换:lexcical_cast 和sstream
- centos中mysql无法显示中文问题
- android studio安装过程
- HDU 1103 Flo's Restaurant(模拟+优先队列)
- 根据容器名称 获取容器在宿主机上的 路劲
- Lua中调用C函数
- 卷积神经网络LeNet Convolutional Neural Networks (LeNet)
- 斯坦福大学UFLDL深度学习推荐阅读列表UFLDL Recommended Readings
- C++ 判断磁盘是否为可移动磁盘
- Linux安装Redis服务
- CI配置多数据库访问的方法
- Hadoop MapReduce的模式、算法和用例
- Redis资料汇总专题
- 使用Flexible实现手淘H5页面的终端适配
- 2013年中国数据库大会PPT
- 软件项目管理的理解