poj 1655 树的重心
题目链接:点击打开链接
题意:给了一个树,去掉一个结点后的子树的节点数的最大值即平衡值,求最小的平衡值,如果平衡值相同,使节点号最小。
思路:其实也就是求树的重心。树的重心是找到一个点使其所有子树中节点个数最大的子树的结点数目最小,使生成的树尽可能平衡。
其实 求树的重心,只需要随便找个点作为根dfs,求每个节点的每个子树的节点数目和去掉该点及其所有子树剩余子树的节点数目的最大值,求这个最大值最小的节点即重心。
详细见代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
#define INF 0x3f3f3f3f
const int maxn = 2*1e4+100;
vector<int >G[maxn];
int Bal=INF,id;
int n;
int dfs(int a,int fa)
{int i;int ans=0;int Max=0;int tmp;for(i=0;i<G[a].size();i++){int v=G[a][i];if(v==fa) continue;tmp=dfs(v,a);ans+=tmp;Max=max(Max,tmp);}Max=max(Max,n-ans-1);if(Max <Bal)Bal=Max,id=a;else if(Max==Bal&&id>a)id=a;return ans+1;
}
int main()
{int t;scanf("%d",&t);while(t--){Bal=INF;scanf("%d",&n);int i;int a,b;for(i=1;i<=n;i++)G[i].clear();for(i=1;i<n;i++){scanf("%d%d",&a,&b);G[a].push_back(b);G[b].push_back(a);}dfs(1,0);printf("%d %d\n",id,Bal);}return 0;
}
poj 1655 树的重心相关推荐
- poj 1655 树的重心 define注意事项
http://blog.csdn.net/acdreamers/article/details/16905653 题意:给定一棵树,求树的重心的编号以及重心删除后得到的最大子树的节点个数size,如果 ...
- Godfather POJ - 3107 树的重心
题目要求输出给出树的所有重心. 有个结论:一棵有根树至多有两个重心. #include<iostream> #include<cstring> using namespace ...
- POJ 1655 Balancing Act (树的重心)
题目链接:http://poj.org/problem?id=1655 题意: 求树的重心(最小序号),以及去掉重心后子树节点最大是多少.(树的重心定义为:找到一个点,其所有的子树中最大的子树节点数最 ...
- POJ 1655 Balancing Act (树的重心 + DFS)
传送门:POJ 1655 题目大意: 求树的重心,如果有多个重心则输出根节点编号最小的一个.树的重心也叫树的质心.找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后 ...
- POJ 1655 Balancing Act[树的重心/树形dp]
Balancing Act 时限:1000ms Description Consider a tree T with N (1 <= N <= 20,000) nodes numbered ...
- POJ - 1655 Balancing Act(树的重心)
题目链接:点击查看 题目大意:给一个树,删除其中一个点就会形成一个森林,点的平衡度为删除了这个节点后,所形成多个树,其中组成树的节点最多,节点个数就是那个平衡度. 题目分析:求树的重心,模板题: 树的 ...
- POJ 1655 求树的重心(树形dp)
题目链接 树的重心: 若树上的一个节点满足其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心. 1.任选一个点为根,只要统计出每个点的子树大小,就能很快求出每个点子树节点的数量的最大值. ...
- POJ 3107 Godfather (树的重心)
题目地址:POJ 3107 还是裸的树的重心,只不过这个要求将所有的重心都输出.很简单. 代码如下: #include <iostream> #include <string.h&g ...
- POJ - 4045 Power Station(树形dp/树的重心)
题目链接:点击查看 题目大意:给出一个n个节点的树,我们需要选出一个节点,到其余任何节点的距离和最小 题目分析:这个题我的第一反应是用树的重心,先求出来符合条件的点,然后再跑一遍dfs求距离,最后输出 ...
最新文章
- Linux下的帮助命令(man/help/info)
- java元婴期(23)----java进阶(mybatis(2)---mapper代理mybatis核心配置文件输入输出映射)
- linux sftp创建多用户,linux下SFTP多用户创建
- 初识组织社会学(part1)--勉为其难,不如顺其自然,在力所能及的层次上研究、解释问题
- Java 8新特性(二)
- Sharepoint学习笔记—关于Unique Document IDs的几点说明及启用步骤
- java 8的内存分代改进_java8的内存结构,这一篇文章就够了
- WCF中使用代理链技术恢复客户端代理层级
- cc2530dma控制器功能_CC2530芯片DMA控制器配置
- 神舟bios更改第一启动项为u盘
- 将算术表达式转换成四元式的程序实现
- 思维模型 吸引力法则/定律
- safari浏览器找不到服务器
- [译] 基于 Python 的图论和网络分析
- Linux aarch64交叉编译之 weston窗口管理程序
- HTML非遗文化网页设计题材【京剧文化】HTML+CSS(大美中国 14页 带bootstarp)
- C# 把时间转为秒_Python基础学习笔记(六)日期与时间
- MySQL数据库字符串(单行)函数#concat、length、tirm、replace、strcmp、substr等函数总结
- 咕泡P6:ElasticStack高级开发与架构(实战班)二期
- 织梦dedecms在网站底部添加备案号链接到工信部的办法