HDU 1856 More is better
2016-03-04 18:44
399 查看
More is better
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 327680/102400 K (Java/Others)Total Submission(s): 21423 Accepted Submission(s): 7805
[align=left]Problem Description[/align]
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.
[align=left]Input[/align]
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)
[align=left]Output[/align]
The output in one line contains exactly one integer equals to the maximum number of boys Mr Wang may keep.
[align=left]Sample Input[/align]
4
1 2
3 4
5 6
1 6
4
1 2
3 4
5 6
7 8
[align=left]Sample Output[/align]
4
2
Hint
A 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.
[align=left]Author[/align]
lxlcrystal@TJU
[align=left]Source[/align]
HDU 2007 Programming Contest - Final
[align=left]Recommend[/align]
lcy | We have carefully selected several similar problems for you: 1213 1325 1879 1102 1198
判断节点最多的
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int pre[10000010],ran[10000010]; int flag; int find(int x) { if(x==pre[x]) return x; return pre[x]=find(pre[x]); } void merge(int x,int y) { int fx=find(x); int fy=find(y); if(fx!=fy) { ran[fy]+=ran[fx]; pre[fx]=fy; if(flag<ran[fy]) flag=ran[fy]; } } int main() { int n,i,j,a,b; while(scanf("%d",&n)!=EOF) { flag=1; for(i=1;i<10000010;i++) { pre[i]=i; ran[i]=1;//初始化 } for(i=1;i<=n;i++) { scanf("%d%d",&a,&b); merge(a,b); } printf("%d\n",flag); } }
相关文章推荐
- jQuery 实现页面关键字查询
- Java面试题多思路解析--有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
- verilog的小数问题
- 10、Cocos2dx 3.0游戏开发找小三之容器篇:Vector、Map、Value
- ASP.NET导入导出
- 6-11-N皇后问题-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版
- POJ1523--SPF--tarjan--割点--分块
- NTV Media Server G3流媒体服务器搭建经验
- bzoj2118 墨墨的等式 最短路
- 【Xamarin挖墙脚系列:Xamarin 上台讲述PPT呵呵呵】
- ios tableView reload不是异步
- Android控件ListView
- 7.6实战练习
- 数据结构与算法笔记 —— 绪论
- 单片机控制蜂鸣器和弦音发音程序
- Yii命令行模式
- JVM 平台上的各种语言的开发指南
- 浅谈 Active Learning
- SPOJ QTREE Query on a tree [树链剖分+线段树]
- 从DecorView PhoneWindow ViewRootImpl类分析View绘制的流程