关于树的重心--POJ 1655
树的重心的定义:
在一棵树中,找到一个点,其所有的子树中最大的子树节点数最少,那么这个点就是这棵树的重心,删去重心后,生成的多棵树尽可能平衡。
通俗来说就是以这个点为根节点,找到他最大的衣蛾子树,然后让这个子树最小。
例题加模板:
POJ 1655
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
const int N=2E4+;
vector<int >ve[N];
bool mark[N]; int ans=N,pos;
int n; int dfs(int x){
mark[x]=;
int sum=;//sum为以x为根节点,其包含的点的总数目。
int s=;
for(int i=;i<ve[x].size();i++){
if(mark[ve[x][i]]) continue ;
int x1=dfs(ve[x][i]);
s=max(s,x1);//
sum+=x1;
}
s=max(s,n-sum-);//以x为根节点,s是X下边的点集的最大值,n-sum-1是x点上边的点集的最大值
// ans=min(ans,s);//最大子树最小if(s<=ans){
if(s==ans){
pos=min(pos,x);
}
else {
ans=s;
pos=x;
}
}
return sum+;
}
void solve()
{
ans=N;
memset(mark,,sizeof mark);
cin>>n;
int x,y;
for(int i=;i<=n;i++) ve[i].clear();
for(int i=;i<=n-;i++){
cin>>x>>y;
ve[x].push_back(y);
ve[y].push_back(x);
}
dfs();
cout<<pos<<" "<<ans<<endl;
}
int main(){
ios::sync_with_stdio();
int t;
cin>>t;
while(t--) solve();
return ;
}
树的重心的一些性质:
1 树上所有的点到重心的距离和最小,可能会有两个重心,此时到这两个重心的距离和最小
2 把两棵树通过一条边相连,新的树的重心在原来两棵树重心的连线上。
3 一棵树添加或者删除一个节点,树的重心最多只移动一条边的位置。
4 一棵树最多有两个重心,并且这两个重心相邻
关于树的重心--POJ 1655的更多相关文章
- 求树的重心 poj 1655
题目链接:https://vjudge.net/problem/POJ-1655 这个就是找树的重心,树的重心就是树里面找一个点,使得以这个点为树根的所有的子树中最大的子树节点数最小.题目应该讲的比较 ...
- POJ 1655 Balancing Act&&POJ 3107 Godfather(树的重心)
树的重心的定义是: 一个点的所有子树中节点数最大的子树节点数最小. 这句话可能说起来比较绕,但是其实想想他的字面意思也就是找到最平衡的那个点. POJ 1655 题目大意: 直接给你一棵树,让你求树的 ...
- POJ 1655 求树的重心
POJ 1655 [题目链接]POJ 1655 [题目类型]求树的重心 &题意: 定义平衡数为去掉一个点其最大子树的结点个数,求给定树的最小平衡数和对应要删的点.其实就是求树的重心,找到一个点 ...
- POJ.1655 Balancing Act POJ.3107 Godfather(树的重心)
关于树的重心:百度百科 有关博客:http://blog.csdn.net/acdreamers/article/details/16905653 1.Balancing Act To POJ.165 ...
- POJ 1655 - Balancing Act - [DFS][树的重心]
链接:http://poj.org/problem?id=1655 Time Limit: 1000MS Memory Limit: 65536K Description Consider a tre ...
- POJ 1655 BalanceAct 3107 Godfather (树的重心)(树形DP)
参考网址:http://blog.csdn.net/acdreamers/article/details/16905653 树的重心的定义: 树的重心也叫树的质心.找到一个点,其所有的子树中最大的 ...
- poj 1655 Balancing Act(找树的重心)
Balancing Act POJ - 1655 题意:给定一棵树,求树的重心的编号以及重心删除后得到的最大子树的节点个数size,如果size相同就选取编号最小的. /* 找树的重心可以用树形dp或 ...
- poj 1655 Balancing Act 求树的重心【树形dp】
poj 1655 Balancing Act 题意:求树的重心且编号数最小 一棵树的重心是指一个结点u,去掉它后剩下的子树结点数最少. (图片来源: PatrickZhou 感谢博主) 看上面的图就好 ...
- POJ 1655 Balancing Act【树的重心模板题】
传送门:http://poj.org/problem?id=1655 题意:有T组数据,求出每组数据所构成的树的重心,输出这个树的重心的编号,并且输出重心删除后得到的最大子树的节点个数,如果个数相同, ...
随机推荐
- PTA 创建计算机类
6-5创建计算机 (10分) 定义一个简单的Computer类,有数据成员芯片(cpu).内存(ram).光驱(cdrom)等等,有两个公有成员函数run.stop.cpu为CPU类的一个对象,ram ...
- CF1326C Permutation Partitions 题解,
原题链接 简要题意: 给定一个 \(1\) ~ \(n\) 的置换,将数组分为 \(k\) 个区间,使得每个区间的最大值之和最大.求这个值,和分区的方案数. 关键在于 \(1\) ~ \(n\) 的置 ...
- 刷oj之类的题时java Scanner读取太慢解决之道
1.转载自一个 https://www.cpe.ku.ac.th/~jim/java-io.html 2.工具代码 class Reader { static BufferedReader reade ...
- OpenCV-Python 图像分割与Watershed算法 | 三十四
目标 在本章中, 我们将学习使用分水岭算法实现基于标记的图像分割 我们将看到:cv.watershed() 理论 任何灰度图像都可以看作是一个地形表面,其中高强度表示山峰,低强度表示山谷.你开始用不同 ...
- PHP7内核(七):常见变量类型的基本结构
上篇文章讲述了变量的存储结构zval,今天我们就来学习一下几个常见变量类型的基本结构. 一.类型一览 zval中的u1.v.type用来存储变量的类型,而zval.value存储的是不同类型对应的值, ...
- Ali_Cloud++:安装 RabbitMQ安装及环境配置
注意事项:rabbitMA版本和erlang并不是同步更新的,会出现版本不匹配,安装不了. 两都版本对应 参考官网文档 其它下载地址 1):Erlang安装 (因为是erlant语言编写的, ...
- html+css实现图片或元素的垂直、水平同时居中的多种方法
实现元素或图片的上下.左右居中的三种方法 效果图如下: 方法一:利用vertical-align属性实现图片上下居中 先设置父元素样式text-align: center,实现图片左右居中,给图片添加 ...
- 新建jsp文件,The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path错误解决方法
新建一个jsp文件后,有一个错误,The superclass "javax.servlet.http.HttpServlet" was not found on the Java ...
- 除了chrome、Firefox之外其他浏览器全都连不上网
在调试jsp时,总是会遇到eclipse打开jsp网页失败,没有网络,浏览器也除了chrome.Firefox之外其他浏览器全都连不上网,这里我也不清楚是什么问题,但是解决方法是: 打开Interne ...
- C9K Stackwise Virtual(一)
一.SV技术基本说明 思科Catalyst9K平台的Stackwise Virtual技术是将两个物理的交换机虚拟成一个逻辑的实体(从网络控制层面和管理的角度来看),这两个交换机合二为一之后,将共享相 ...