BZOJ 1131 [POI2008]Sta(树形DP)
【题目链接】 http://www.lydsy.com/JudgeOnline/problem.php?id=1131
【题目大意】
给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大
【题解】
我们记dp[i]为所有点到i的深度之和,我们发现对于定根树,
dp[x]=dp[fx]+n-2*size[x],那么我们随意定根,先算出dp[root],
递归计算每个dp[x],对于计算每个节点的不同链时,回溯消除链上影响。
【代码】
#include <cstdio>
#include <vector>
using namespace std;
const int N=1000010;
typedef long long LL;
vector<int> v[N];
int size[N],pos,n;
LL ans,res;
void dfs(int x,int d,int fx){
res+=d; size[x]=1;
for(int i=0;i<v[x].size();i++)if(fx!=v[x][i]){
dfs(v[x][i],d+1,x);
size[x]+=size[v[x][i]];
}
}
void dfs2(int x,int fx){
for(int i=0;i<v[x].size();i++)if(fx!=v[x][i]){
int y=v[x][i];
res=res+n-2*size[y];
if(res>ans||res==ans&&y<pos){
pos=y;
ans=res;
}dfs2(y,x);
res=res-(n-2*size[y]);
}
}
int main(){
while(~scanf("%d",&n)){
res=ans=0;
for(int i=1;i<n;i++){
int x,y;
scanf("%d%d",&x,&y);
v[x].push_back(y);
v[y].push_back(x);
}dfs(1,0,0);
ans=res;pos=1;
dfs2(1,0);
printf("%d\n",pos);
}return 0;
}
BZOJ 1131 [POI2008]Sta(树形DP)的更多相关文章
- bzoj 1131 [POI2008]Sta 树形dp 转移根模板题
[POI2008]Sta Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1889 Solved: 729[Submit][Status][Discu ...
- Bzoj 1131[POI2008]STA-Station (树形DP)
Bzoj 1131[POI2008]STA-Station (树形DP) 状态: 设\(f[i]\)为以\(i\)为根的深度之和,然后考虑从他父亲转移. 发现儿子的深度及其自己的深度\(-1\) 其余 ...
- BZOJ 1131: [POI2008]Sta( dfs )
对于一棵树, 考虑root的答案向它的孩子转移, 应该是 ans[son] = (ans[root] - size[son]) + (n - size[son]). so , 先 dfs 预处理一下, ...
- BZOJ 1131: [POI2008]Sta
Description 一棵树,问以那个节点为根时根的总和最大. Sol DFS+树形DP. 第一遍统计一下 size 和 d. 第二遍转移根,统计答案就行了. Code /************* ...
- 【bzoj1131】[POI2008]Sta 树形dp
题目描述 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 输入 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. 输出 输出你所找到的点,如果具有 ...
- BZOJ1131[POI2008]Sta——树形DP
题目描述 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 输入 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. 输出 输出你所找到的点,如果具有 ...
- 【BZOJ-1131】Sta 树形DP
1131: [POI2008]Sta Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1150 Solved: 378[Submit][Status] ...
- 1131: [POI2008]Sta
1131: [POI2008]Sta Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 783 Solved: 235[Submit][Status] ...
- bzoj 2286(虚树+树形dp) 虚树模板
树链求并又不会写,学了一发虚树,再也不虚啦~ 2286: [Sdoi2011]消耗战 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 5002 Sol ...
随机推荐
- java servlet jsp 导入boostrap css js
1.在导入boostrap.css的时候注意了 一定要注意路径,你知道把js和css包放在servlet服务器的静态路径下面就是 lib 文件夹路径下,直接使用 lib/js/boostrap.css ...
- python初步学习-python数据类型-列表(list)
列表 list 在 python 中具有非常强大的功能 定义 在python中,用方括号表示一个list:[] 在方括号里面,可以是 int,也可以是 str类型的数据,甚至也可以是Flase/Tru ...
- Spring Cloud Eureka服务注册源码分析
Eureka是怎么work的 那eureka client如何将本地服务的注册信息发送到远端的注册服务器eureka server上.通过下面的源码分析,看出Eureka Client的定时任务调用E ...
- map,set的底层实现:红黑树[多图,手机慎入]
最近天下有一种颇不太平的感觉,各地的乱刀砍人,到处是贪官服法.京东准备上市了,阿里最近也提交申请了,猎豹也逆袭了,据说猎豹移动在国际市场上表现甚是抢眼.只有屌丝还在写着代码.花开花又谢,花谢花又开,为 ...
- java===java基础学习(10)---对象构造
重载 如果多个方法有相同的名字,不同的参数,便产生了重载.编译器必须挑选出具体执行哪个方法,他通过用各个方法给出的参数类I型那个与特定方法调用所使用的值类型进行匹配来挑选出相应的方法.如果编译器找不到 ...
- mongodb实现批量修改数据
var rds = db.REGIPATIENTREC.find({mzh:{$lt:"0"},usrOrg:"石景山中西医结合医院"}); var show ...
- NOI openjudge 1792.迷宫
一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行.同时当Extense处在某个格点时,他只 ...
- Linux下安装PHP环境(非集成)
一.安装Apache1.到官网下载 http://httpd.apache.org/download.cgi 2.安装apache [root@localhost 52lamp]# mkdir ...
- .NET 二进制序列化器,SOAP序列化器,XML序列化器
这里就不说JSON序列化了,只介绍三种:二进制序列化器,SOAP序列化器,XML序列化器 直接上代码: /// <summary> /// 二进制序列化器. /// 最节省流量,压缩程度最 ...
- 封装CSS动画
写在前面:感谢腾讯课堂与妙味课堂的移动端公开课 对于需要设置动画的元素需要提前设置css()样式,这样数据才会被记录起来. function css(ele, attr, val) { if (/ro ...