【并查集】hdu 1856 More is better
来源:互联网 发布:vc贪吃蛇c语言代码 编辑:程序博客网 时间:2024/06/03 11:25
More is better
Time Limit: 5000/1000 MS (Java/Others)
Memory Limit: 327680/102400 K (Java/Others)
Problem Description
Mr Wang wants some boys to help him with a project. Because the project is rather complex, the more boys come, the better it will be. Of course there are certain requirements.
Mr Wang selected a room big enough to hold the boys. The boy who are not been chosen has to leave the room immediately. There are 10000000 boys in the room numbered from 1 to 10000000 at the very beginning. After Mr Wang's selection any two of them who are still in this room should be friends (direct or indirect), or there is only one boy left. Given all the direct friend-pairs, you should decide the best way.
Mr Wang selected a room big enough to hold the boys. The boy who are not been chosen has to leave the room immediately. There are 10000000 boys in the room numbered from 1 to 10000000 at the very beginning. After Mr Wang's selection any two of them who are still in this room should be friends (direct or indirect), or there is only one boy left. Given all the direct friend-pairs, you should decide the best way.
Input
The first line of the input contains an integer n (0 ≤ n ≤ 100 000) - the number of direct friend-pairs. The following n lines each contains a pair of numbers A and B separated by a single space that suggests A and B are direct friends. (A ≠ B, 1 ≤ A, B ≤ 10000000)
Output
The output in one line contains exactly one integer equals to the maximum number of boys Mr Wang may keep.
Sample Input
41 23 45 61 641 23 45 67 8
Sample Output
42HintA and B are friends(direct or indirect), B and C are friends(direct or indirect), then A and C are also friends(indirect). In the first sample {1,2,5,6} is the result.In the second sample {1,2},{3,4},{5,6},{7,8} are four kinds of answers.
题意:王老师要找一些男生帮助他完成一项工程。要求最后挑选出的男生之间都是朋友关系,可以说直接的,也可以是间接地。问最多可以挑选出几个男生(最少挑一个)
这是一个有关并查集的题目。只不过不是求有几个集合,而是求每个集合中元素的个数,进而求出个数的最大值。和求集合个数的方法差不多,只需要在合并两个集合时处理一下,让这两个集合的元素个数也合并一下就行了。接下来只需要找出最大值即可。要注意的一个地方就是:当n=0时,要输出1
///AC代码
///AC代码
#include<stdio.h>#define N 10000000int father[N], num[N];void initial()/*初始化*/{ int i; for (i = 1; i <= N; i++) { father[i] = i; num[i] = 1; /*开始时数量都为1,根节点为自己*/ }}int find(int x) /*寻找根节点*/{ if (father[x] != x) { father[x] = find(father[x]); } return father[x];}void merge(int a, int b) /*合并a和b*/{ int p = find(a); int q = find(b); if (p != q) { father[p] = q; num[q] += num[p]; /*合并集合中元素个数*/ }}int main(){ int n, a, b, i, maxx; while (~scanf("%d", &n)) { if (n == 0) { printf("1\n"); continue; } maxx = 0; initial(); /*初始化*/ for (i = 0; i < n; i++) { scanf("%d%d", &a, &b); if (a > maxx) { maxx = a; } if (b > maxx) { maxx = b; } merge(a, b); /*合并集合*/ } int Max = 0; for (i = 1; i <= maxx; i++) if (num[i] > Max) /*查找最大值*/ { Max = num[i]; } printf("%d\n", Max); } return 0;}
阅读全文
0 0
- hdu 1856 More is better(并查集基础)
- hdu 1856 More is better 并查集(二)
- 并查集 Hdu 1856 More is better
- hdu 1856 More is better (并查集入门)
- HDU 1856 More is better 并查集 路径压缩
- hdu 1856 More is better(并查集)
- hdu 1856 More is better(并查集)
- hdu 1856 more is better 并查集
- hdu 1856 More is better 并查集
- HDU 1856 More is better 并查集
- hdu 1856 More is better(并查集)
- hdu 1856 More is better (并查集)
- HDU 1856 More is better 并查集
- HDU-1856-More is better(并查集)
- HDU 1856 More is better (数据结构,并查集)
- hdu 1856 More is better --- 并查集
- 【并查集】 hdu 1856 More is better
- 【并查集】hdu 1856 More is better
- AtCoder Regular Contest 079 C D E
- jsp九大内置对象
- STM32命名规则+F1系列数据手册
- 剑指offer:数组中出现次数超过一半的数字
- Kotlin in Action Review Points
- 【并查集】hdu 1856 More is better
- 最大似然估计
- Spring Cloud微服务(5)之Hystrix断路器
- 【线段树】295A Greg and Array
- Hibernate与Jpa的关系,终于弄懂
- vim 编辑器命令详解
- 字符串函数
- 【设计模式入门】设计模式概述
- 翻译《苹果文件系统指南》(一)