杭电1856More is better
2015-11-14 14:43
344 查看
求大神指点杭电1586more is better,答案对,就是超时(⊙o⊙)求指点
More is better
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 327680/102400 K (Java/Others)Total Submission(s): 19936 Accepted Submission(s): 7313
[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. #include <iostream> using namespace std; int arr[10000001] ; int num[10000001] ; int Max; inline int find(int r) { while(r!=arr[r]) r=arr[r]; return r; } inline void judge(int a,int b) { int x,y; x=find(a); y=find(b); if(x!=y) { arr[y]=x; num[x]=num[y]+num[x]; num[y]=num[x]; if(num[y]>Max) Max=num[y]; } } inline void Init() { for(int i=1;i<= 10000001 ;i++) { arr[i]=i; num[i]=1; } } int main() { int N,a,b; while (cin>>N) { Init(); Max=num[1]; while(N--) { cin>>a>>b; judge(a, b); } cout<<Max<<endl; } return 0; }
相关文章推荐
- 正则表达式
- 在Ubuntu 14.04 LTS系统中设置Apache虚拟主机
- Redis安装详细教程
- HDU 2222 AC自动机
- 软件使用技巧2:EXCEL工作表保护密码的撤销
- LeetCode---Basic Calculator
- 被驱动表 拼接列无法走索引
- Hadoop完全分布式搭建过程中遇到的问题小结
- Timus Online Judge 1966 Cycling Roads
- Unity Sharder帧动画
- Xcode MARK TODO FIXME 标记
- poj3468(线段树||树状数组)
- android 资源
- Spark修炼之道(基础篇)——Linux大数据开发基础:第三节:用户和组
- 3DSMax导出插件VS调试
- html5基础知识第四章其他标签
- Spring4之Hello World
- 侧滑菜单1
- java ssl双向验证httpclient客户端请求工具类
- Spark修炼之道(基础篇)——Linux大数据开发基础:第二节:Linux文件系统、目录(一)