并查集使用(2):more is better
来源:互联网 发布:网络信息安全的重要性 编辑:程序博客网 时间:2024/06/08 09:50
题目网址:more is better
题目分析:这个题目大致是说,有10000000个朋友,他们之中有N对好朋友,且朋友之间具有传递性,再给出N对朋友关系之后,找出最多的人数的集合,并输出最大的人数!其实就是之前在我的博客并查集梳理(1)里面merge函数中添加一步,为每个集合统计集合元素的数目,事先为每一个元素定义一个sum数组,初始化都是1(表示根节点自身)每一次需要合并都需要sum想加!最后找出最大的元素集合输出sum即可;
#include<iostream>using namespace std;int parent[10000001];int sum[10000001];int findroot(int x){if (parent[x] != x)parent[x] = findroot(parent[x]);//当前节点的根节点设置成查找返回的根节点的编号return parent[x];}void merge(int a, int b)/*合并a和b*/{a = findroot(a);b= findroot(b);if (a != b){parent[a] = b;//a变成子树,b为新树的根 sum[b] += sum[a];/*合并两集时,将成为子树的树的根节点上保存的该集合元素的个数加入新合并的树的树根*/}}int main(){int n;while (cin >> n){for (int i = 1; i <= 10000000; i++){//初始化不能少,初始的时候每个节点都是孤立的集合,即所在集合只有一个节点,本身即为根节点parent[i] = i;sum[i] = 1;}int maxn = -1;//用来统计最大的下标,这样就不用再最后找最大的sum时,从1扫描到1000000while (n--){int a, b;cin >> a >> b;if (a > maxn)maxn = a;else if (b > maxn)maxn = b;merge(a, b);}int ans =1;//每一个集合初始化最小为1,所以我设置为1for (int i = 1; i <= maxn; i++){if (parent[i] == i&&sum[i]>ans)ans=sum[i];}cout << ans << endl;}return 0;}
阅读全文
0 0
- 并查集使用(2):more is better
- More is better(并查集)
- more is better(并查集)
- More is better (并查集)
- More is better (并查集)
- More is better(并查集)
- More is better (并查集)
- More is better hdu1856 并查集
- hdu1856 ,More is better,并查集
- 并查集C - More is better
- HDOJ1856 More is better 【并查集】
- Hdu1856 - More is better - 并查集
- HDU1856 More is better 并查集
- 并查集 HDOJ1856 More is better
- HDU1856 More is better 并查集
- More is better---并查集实践
- More is better(并查集)
- hdu1856 More is better 并查集
- 0 1 矩阵查找最大正方形
- MySQL中的CONCAT、CONCAT_WS、GROUP_CONCAT函数,实现多行和多列的内容放在一个单元格内
- 第二十五篇 jQuery 学习7 获取并设置 CSS 类
- 灰度图像的腐蚀与膨胀
- MYSQL GROUP BY 对多个字段进行分组
- 并查集使用(2):more is better
- spring form 以及数据校验
- UNP(卷2:进程间通信)—— 第14章:System V共享内存区
- 洛谷Oj-乌龟棋-四维动态规划
- 从零开始前端学习[16]:box-shadow阴影属性的使用
- Apache Tomcat开机后台启动
- 非监督特征学习与深度学习(二)----逻辑回归
- poj3984 迷宫问题 bfs水题
- react 实战案例(webpack构建)