POJ3107Godfather
题目链接
Godfather
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 11238 | Accepted: 3946 |
Description
Last years Chicago was full of gangster fights and strange murders. The chief of the police got really tired of all these crimes, and decided to arrest the mafia leaders.
Unfortunately, the structure of Chicago mafia is rather complicated. There are n persons known to be related to mafia. The police have traced their activity for some time, and know that some of them are communicating with each other. Based on the data collected, the chief of the police suggests that the mafia hierarchy can be represented as a tree. The head of the mafia, Godfather, is the root of the tree, and if some person is represented by a node in the tree, its direct subordinates are represented by the children of that node. For the purpose of conspiracy the gangsters only communicate with their direct subordinates and their direct master.
Unfortunately, though the police know gangsters’ communications, they do not know who is a master in any pair of communicating persons. Thus they only have an undirected tree of communications, and do not know who Godfather is.
Based on the idea that Godfather wants to have the most possible control over mafia, the chief of the police has made a suggestion that Godfather is such a person that after deleting it from the communications tree the size of the largest remaining connected component is as small as possible. Help the police to find all potential Godfathers and they will arrest them.
Input
The first line of the input file contains n — the number of persons suspected to belong to mafia (2 ≤ n ≤ 50 000). Let them be numbered from 1 to n.
The following n − 1 lines contain two integer numbers each. The pair ai, bi means that the gangster ai has communicated with the gangster bi. It is guaranteed that the gangsters’ communications form a tree.
Output
Print the numbers of all persons that are suspected to be Godfather. The numbers must be printed in the increasing order, separated by spaces.
Sample Input
6
1 2
2 3
2 5
3 4
3 6
Sample Output
2 3
求树的重心。就是去除这个点,留下的块中节点数最多的块,与去除其他节点相比,是最少的。
这根本不是树形dp吧。。。就一模拟。。。
不过事实证明,流输入输出优化后也没有scanf,printf快。
一个弱智错误还卡了我半天。。。
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <cstring>
#define ms(a,b) memset(a,b,sizeof(a))
using namespace std;
const int N=5e4+10;
int h[N<<1],nx[N<<1],to[N<<1];
int ans[N],n,tot;
void add(int u,int v)
{to[++tot]=v;nx[tot]=h[u];h[u]=tot;
// cout<<u<<' '<<to[tot]<<endl;
}
int dfs(int x,int fa)
{int sum=1;ans[x]=0;for(int i=h[x];i;i=nx[i]){int v=to[i];if(v==fa) continue;int t=dfs(v,x);
// cout<<v<<' '<<t<<endl;ans[x]=max(ans[x],t);sum+=t;}ans[x]=max(ans[x],n-sum);return sum;
}
int main()
{
// ios::sync_with_stdio(false);
// cin.tie(0);
// cout.tie(0);while(~scanf("%d",&n)){int x,y;ms(h,0);tot=0;for(int i=1;i<n;i++){scanf("%d%d",&x,&y);add(x,y);add(y,x);}dfs(1,0);int res=n;for(int i=1;i<=n;i++)res=min(ans[i],res);//这里的ans[i]写成了ans[x] for(int i=1;i<=n;i++)if(res==ans[i])printf("%d ",i);printf("\n");}
}
POJ3107Godfather相关推荐
- POJ3107Godfather找重心
易水人去,明月如霜. Description Last years Chicago was full of gangster fights and strange murders. The chief ...
最新文章
- 数据结构(C语言版) 第 三 章 栈与队列 知识梳理 + 作业习题详解
- nn.Upsampling is deprecated. Use nn.functional.interpolate instead.
- python爬虫技术可以干什么-Python除了爬虫,还能干啥?
- spring源码分析之cache注解
- gmod的css模块放哪,gmod模式怎么更换?gmod模块安装步骤教程
- 敏捷软件开发读书笔记2
- 【安卓开发】AS神奇的报错:Cannot find AVD system path. Please define ANDROID_SDK_ROOT
- 【java】java getOrDefault 方法的一个坑,容易导致OOM
- 设计模式学习-简单工厂模式
- UI素材资源|Material风格的插图,有品位的素材
- ActiveMq工作笔记002---Centos7.3安装ActiveMq
- LeetCode—4.滑动窗口
- Atitit usrQBF2312 命名空间pkg 以及 api命名 spec规范
- 基于PSCAD输电线路潮流计算
- 查看CentOS系统配置情况命令
- XMind 8 Update 7 激活
- python3网络爬虫(堆糖网)
- Photoshop透明度网格颜色设置方法
- sublime 前端css 插件
- 计算机本地网络给手机使用吗,手机网络也能共享给电脑(台式or笔记本)使用吗?...