poj 3107 Godfather 求树的重心
来源:互联网 发布:不破坏数据做活动分区 编辑:程序博客网 时间:2024/05/14 17:40
题目:点击打开链接
题意:黑手党有n个人,关系相当于一棵n个节点的树,去掉某个节点后,树被分成很多块,使得分出来的块中最大连通块节点数最小,这个节点便是Goldfather,Goldfather可能有多个,升序输出。
分析:其实这是一道求树的重心的问题,对于一颗n结点的无根树,找到一个点,使得把树变成以该节点为根的有根数时,最大子树的节点数最小。也就是说,删除这个点后最大连通块的节点数最小。
可以进行两次dfs,第一次dfs,求出以每个节点为树根的子树的节点数。第二次dfs比较每个节点的子树的节点数最大的,再和它的父结点的那棵树的节点数比较,找到最大连通分量的最大的节点数。这样就求好了。==这两次dfs可以和在一起。
#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>#define INF 0xfffffffusing namespace std;const int N=50000+5;struct edge{ int v,next;}e[N<<1];int head[N],f[N],num[N];bool vis[N];int cnt,t,MIN,n;void init(){ memset(head,-1,sizeof(head)); memset(f,0,sizeof(f)); memset(vis,0,sizeof(vis)); memset(num,0,sizeof(num)); cnt=1; MIN=INF;}void add_edge(int u,int v){ e[cnt].v=v; e[cnt].next=head[u]; head[u]=cnt++;}void dfs(int u){ vis[u]=1; f[u]=1; int minn=-1; for(int i=head[u];~i;i=e[i].next){ int v=e[i].v; if(!vis[v]){ dfs(v); f[u]+=f[v]; minn=max(minn,f[v]); } } minn=max(minn,n-f[u]); if(minn<MIN){ t=0; num[t++]=u; MIN=minn; } else if(minn==MIN){ num[t++]=u; }}int main(){ int u,v; //freopen("f.txt","r",stdin); while(~scanf("%d",&n)){ init(); for(int i=0;i<n-1;i++){ scanf("%d%d",&u,&v); add_edge(u,v); add_edge(v,u); } dfs(1); sort(num,num+t); for(int i=0;i<t-1;i++) printf("%d ",num[i]); printf("%d\n",num[t-1]); } return 0;}
0 0
- poj 3107 Godfather 求树的重心
- POJ 3107 Godfather (求树的重心)
- POJ 3107 Godfather 求重心
- Poj 3107 Godfather (树的重心)
- POJ 3107 Godfather (树的重心)
- poj 3107 Godfather(树的重心)
- 【POJ 3107 】Godfather 【树的重心】
- poj 3107 Godfather 求树的所有重心 树形DP基础题
- POJ3107 Godfather 求树的重心
- poj 3107 Godfather(树形dp,树的重心)
- POJ 题目3107 Godfather(树的重心)
- poj 3107 Godfather(树的重心问题)
- POJ.3107 Godfather (树形DP 树的重心)
- POJ 3107 Godfather (树的重心模板题)
- Poj 2599 Godfather(树的重心)
- POJ-3107 Godfather & POJ-2378 Tree Cutting(树的重心)
- poj 3107 求树的所有重心
- POJ 3107 求树的重心
- ICMP TYPE CODE 对应表
- 深入理解Activity的LaunchMode
- [自考]信息资源管理
- Longest Increasing Subsequence
- 记一次Linux文本处理
- poj 3107 Godfather 求树的重心
- mariaDB grant privileges
- iOS MVVM设计模式
- 面向对象设计6大原则之二(开放-关闭原则)更稳定,更灵活
- JavaWeb学习总结(一)——JavaWeb开发入门
- 数据库之mysql忘记root密码解决方案
- SAP的库龄分析表
- 第三课:矩阵
- 3629: [JLOI2014]聪明的燕姿 约数和+dfs