<题目链接>

题目大意:
给你一棵树,任意去除某一个点后,树被分成了几个联通块,则该点的平衡值为所有分成的连通块中,点数最大的那个,问你:该树所有点中,平衡值最小的那个点是什么?

解题分析:

运用DFS,找到以u为根节点,所有子节点数的最大值,然后求出这些最大值的最小值。

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 2e4+;
struct Edge{
int to,next;
}edge[MAXN*]; //注意这里要*2,因为要存双向边 int head[MAXN],tot;
void init(){
memset(head,-,sizeof(head));
tot = ;
}
void addedge(int u,int v){
edge[tot].to = v;edge[tot].next = head[u];
head[u] = tot++;
}
int dp[MAXN],num[MAXN];
int n; void dfs(int u,int pre){
dp[u] = ;num[u] = ;
for(int i = head[u];i != -;i = edge[i].next){
int v = edge[i].to;
if(v == pre)continue; //如果下一个点是u的父亲(即刚刚走过的点),那么跳过,防止下一步dfs(v,u)遍历该无向图时,不停的在两个点之间来回遍历
dfs(v,u); //继续从它的子节点开始向下搜索
dp[u] = max(dp[u],num[v]); //dp[u]指的是u的每个子节点方向所对应的最大节点数的最大值
num[u] += num[v];
}
//num[u]此时代表除父节点方向外的所有子节点数(包括它本身,,因为num[u]初始化为1)
dp[u] = max(dp[u],n - num[u]); //n-num[u]指的是dp[u]父节点方向的节点数
} int main(){
int T;scanf("%d",&T);
int u,v;
while(T--){
scanf("%d",&n);
init();
for(int i = ;i < n;i++){
scanf("%d%d",&u,&v);
addedge(u,v);addedge(v,u);
}
dfs(,-);
int loc=-,ans=1e9;
for(int i=;i<=n;i++){
if(ans>dp[i])
ans=dp[i],loc=i;
}
printf("%d %d\n",loc,ans);
}
return ;
}

2018-08-17

POJ 1655 Balancing Act (求树的重心)【树形DP】(经典)的更多相关文章

  1. POJ 1655 Balancing Act(求树的重心--树形DP)

    题意:求树的重心的编号以及重心删除后得到的最大子树的节点个数size,假设size同样就选取编号最小的. 思路:随便选一个点把无根图转化成有根图.dfs一遍就可以dp出答案 //1348K 125MS ...

  2. poj 1655 Balancing Act 求树的重心【树形dp】

    poj 1655 Balancing Act 题意:求树的重心且编号数最小 一棵树的重心是指一个结点u,去掉它后剩下的子树结点数最少. (图片来源: PatrickZhou 感谢博主) 看上面的图就好 ...

  3. POJ 1655 Balancing Act (树的重心,常规)

    题意:求树的重心,若有多个重心,则输出编号较小者,及其子树中节点最多的数量. 思路: 树的重心:指的是一个点v,在删除点v后,其子树的节点数分别为:u1,u2....,设max(u)为其中的最大值,点 ...

  4. POJ 1655 BalanceAct 3107 Godfather (树的重心)(树形DP)

    参考网址:http://blog.csdn.net/acdreamers/article/details/16905653   树的重心的定义: 树的重心也叫树的质心.找到一个点,其所有的子树中最大的 ...

  5. POJ 1655 Balancing Act【树的重心】

    Balancing Act Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14251   Accepted: 6027 De ...

  6. POJ 1655 Balancing Act【树的重心模板题】

    传送门:http://poj.org/problem?id=1655 题意:有T组数据,求出每组数据所构成的树的重心,输出这个树的重心的编号,并且输出重心删除后得到的最大子树的节点个数,如果个数相同, ...

  7. POJ 1655 - Balancing Act - [DFS][树的重心]

    链接:http://poj.org/problem?id=1655 Time Limit: 1000MS Memory Limit: 65536K Description Consider a tre ...

  8. POJ 1655 Balancing Act ( 树的重心板子题,链式前向星建图)

    题意: 给你一个由n个节点n-1条边构成的一棵树,你需要输出树的重心是那个节点,以及重心删除后得到的最大子树的节点个数size,如果size相同就选取编号最小的 题解: 树的重心定义:找到一个点,其所 ...

  9. POJ 1655 Balancing Act 焦点树

    标题效果:鉴于一棵树.除去一个点之后,这棵树将成为一些中国联通的块.之后该点通过寻求取消最低形成块的最大数目. 思维:树DP思维.通过为每个子树尺寸的根节点深搜索确定.之后该节点然后除去,,还有剩下的 ...

随机推荐

  1. Vue项目实践中的功能实现与要点

    本贴记录项目实践中,各种功能的实现与技术要点,均有待改进. 路由切换的时候,显示loading动画 目前方案是: 在每个页面都手动装载一个loading组件组件的显示依赖vuex里面的一个值 , 在r ...

  2. Service的线程、工作线程、权限及系统Service

    Service组件和其他组件一样,都是运行于应用的主线程当中,它们都运行于同一个单一的线程中. 可以把Service简单的理解成一个没有界面显示的Activity(这个比喻其实并不准确,因为Servi ...

  3. Dubbo服务超时

    服务消费者引用服务提供者的服务时可能由于网络原因导致长时间未返回相应,此时大量的线程将会阻塞,引起性能下降等问题.可以通过引入服务超时来解决该问题 服务超时指服务在给定的时间内未返回相应将立即终止该请 ...

  4. DMA及cache一致性的学习心得 --dma_alloc_writecombine【转】

    转自:https://www.cnblogs.com/hoys/archive/2012/02/17/2355914.html 来源:http://xmxohy.blog.163.com/blog/s ...

  5. ES系列四、ES6.3常用api之文档类api

    1.Index API: 创建并建立索引 PUT twitter/tweet/ { "user" : "kimchy", "post_date&quo ...

  6. vuejs初学入门环境搭建

    一.Nodejs:    1.安装下载:http://nodejs.cn/download/    2.Node.js安装配置: http://www.runoob.com/nodejs/nodejs ...

  7. Unicode范围预览

    链接: https://www.zhangxinxu.com/study/201611/show-character-by-charcode.php?range=4E00-9FBB 备注: Unico ...

  8. vue 安装教程(自己安装过程及遇到的一些坑)

    1.安装node.js(http://www.runoob.com/nodejs/nodejs-install-setup.html) 2.基于node.js,利用淘宝npm镜像安装相关依赖 在cmd ...

  9. IntelliJ IDEA创建JavaWeb工程及配置Tomcat部署

    步骤: 在WEB-INF 下创建classes 和 lib 两个文件夹 右上角一个蓝色的按钮... Modules选项卡,Paths下的配置...输出路径选择classes Dependencies选 ...

  10. keras2.0的一些变化

    keras 变化太快了https://github.com/fchollet/keras/wiki/Keras-2.0-release-notes