POJ 3107 求树的重心
来源:互联网 发布:i代表什么矩阵 编辑:程序博客网 时间:2024/05/21 00:53
题意:求出树的所有重心编号,从小到大排序输出
#include<cstring>#include<string>#include<cstdio>#include<cstdlib>#include<iostream>#include<cmath>#include<algorithm>#include<queue>#include<vector>#include<map>#include<list>#include<stack>#include<climits>#include<cctype>#include<bitset>#include<set>#include<sstream>#include<climits>using namespace std;#define mod 1000000007#define PI acos(-1.0)#define INF 0x3f3f3f3ftypedef long long LL;typedef unsigned long long ULL;const int maxn=50005;struct edge{ int to,next;}E[maxn<<1];int n,tol,num;int son[maxn];int head[maxn];bool vis[maxn];int ans[maxn];int siz;void init(){ siz=INF; tol=0; memset(vis,0,sizeof(vis)); memset(head,-1,sizeof(head)); memset(son,0,sizeof(son));}void add(int u,int v){ E[tol].to=v; E[tol].next=head[u]; head[u]=tol++;}void dfs(int u){ vis[u]=1; son[u]=0; int tmp=0; for(int i=head[u];i!=-1;i=E[i].next){ int to=E[i].to; if(!vis[to]){ dfs(to); son[u]+=son[to]+1; tmp=max(tmp,son[to]+1); } } tmp=max(tmp,n-son[u]-1); if(tmp<siz){ num=0; siz=tmp; ans[num++]=u; } else if(tmp==siz){ ans[num++]=u; }}int main(){ while(~scanf("%d",&n)){ init(); for(int i=1;i<=n-1;i++){ int u,v; scanf("%d%d",&u,&v); add(u,v); add(v,u); } dfs(1); sort(ans,ans+num); printf("%d",ans[0]); for(int i=1;i<num;i++){ printf(" %d",ans[i]); } printf("\n"); } return 0;}
0 0
- poj 3107 Godfather 求树的重心
- poj 3107 求树的所有重心
- POJ 3107 求树的重心
- 【求树的重心】POJ
- 求树的重心 POJ 1655、POJ 3107 树形DP
- POJ 1655 +POJ 3107【求树的重心】
- poj 1655(3107、2378) 求树的重心
- POJ 3107 Godfather (求树的重心)
- POJ 1655(求树的重心)
- poj 1655 求树的重心
- poj 1655 求树的重心
- POJ 1655 求树的重心
- POJ 1655 求树的重心
- POJ-1665 求树的重心 dfs
- POJ 3107树的重心
- POJ 3107 Godfather 求重心
- 求树的重心
- 求树的重心
- Android基础知识点-Manifest清单文件
- 逆波兰表示法 Reverse Polish notation,RPN
- Linux内核配置与编译流程
- Java字节码浅析(—)
- Java wait() notify()方法使用实例讲解
- POJ 3107 求树的重心
- TMS320F28335/ <1> 开发环境的搭建
- 进程之间的通信的方式有哪些,他们之间的区别是什么!或者是忧缺点
- 从ruby到x86机器语言
- Linux搜索指定文件夹并打开最符合搜索目标名称的文件
- h5-css3新增背景属性
- android开发 MVP模式介绍与实战
- servlet概念 作用 流程
- 闰年判断