POJ1655 Balancing Act(树的重心)
2016-02-23 21:21
344 查看
树的重心即树上某结点,删除该结点后形成的森林中包含结点最多的树的结点数最少。
一个DFS就OK了。。
一个DFS就OK了。。
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define MAXN 222222 struct Edge{ int u,v,next; }edge[MAXN<<1]; int NE,head[MAXN]; void addEdge(int u,int v){ edge[NE].u=u; edge[NE].v=v; edge[NE].next=head[u]; head[u]=NE++; } int n,size[MAXN],x,y; void dfs(int u,int fa){ int cnt=1,res=0; for(int i=head[u]; i!=-1; i=edge[i].next){ int v=edge[i].v; if(v==fa) continue; dfs(v,u); cnt+=size[v]; res=max(res,size[v]); } size[u]=cnt; res=max(res,n-size[u]); if(y>res) y=res,x=u; else if(y==res && x>u) x=u; } int main(){ int t,a,b; scanf("%d",&t); while(t--){ NE=0; memset(head,-1,sizeof(head)); scanf("%d",&n); for(int i=1; i<n; ++i){ scanf("%d%d",&a,&b); addEdge(a,b); addEdge(b,a); } y=(1<<30); dfs(1,0); printf("%d %d\n",x,y); } return 0; }
相关文章推荐
- git命令
- A a和A *a = new A()区别
- <<程序员面试金典>>的题
- HDU 1017 A Mathematical Curiosity
- pcl_all_in_one 1.7.2 安装配置
- 【数据挖掘实战】之天猫移动推荐比赛
- 常用DNS记录
- cin,cinget,cingetline,etc
- 在VS2013下新建一个控制台宿主的WCF工程
- 视频基本知识
- 关于装完系统出现a disk read error occurred的解决方法
- RHEL7学习之ISCSI配置
- 51单片机入门之五:数码管显示(动态)
- git同步本地分支
- studio调用百度MAP的JNI发生的问题: No implementation found for long com.baidu.platform.comjni.map.commonmemcach
- opencv下kd树使用笔记
- Castle ActiveRecord 二级缓存使用 异常记录
- <init>与<clinit>的区别 http://blog.csdn.net/sunmenggmail/article/details/10211395
- 二维费用背包模板(2159)
- 我为何放弃Gulp与Grunt,转投npm scripts(上)