博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【bzoj1131】[POI2008]Sta 树形dp
阅读量:5025 次
发布时间:2019-06-12

本文共 1526 字,大约阅读时间需要 5 分钟。

题目描述

给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大

输入

给出一个数字N,代表有N个点.N<=1000000 下面N-1条边.

输出

输出你所找到的点,如果具有多个解,请输出编号最小的那个.

样例输入

8

1 4
5 6
4 5
6 7
6 8
2 4
3 4


题解

树形dp

f[x]表示子树i中所有点到点x的距离之和。

g[x]表示整个树中所有点到点x的距离之和。

然后我们发现f和g都是可以递推求出来的,并且f[1]=g[1]。

于是可以先求f[x],f[x]=∑(f[to[i]]+si[to[i]])。

因为这些点到x的距离比到to[i]多1,总共有si[to[i]]个点,所以加上si[to[i]]。

然后g[1]=f[1],再递推求g[to[i]],g[to[i]]=g[x]+n-2*si[to[i]]。

因为有n-si[to[i]]个点到to[i]的距离比到x多1,所以加n-si[to[i]];有si[to[i]]个点到to[i]的距离比到x少1,所以再减si[to[i]],最后就是g[x]+n-2*si[to[i]]。

最后求g[x]的最大值即可。

#include 
int n , head[1000001] , to[2000001] , next[2000001] , cnt;long long si[1000001] , f[1000001] , g[1000001];void add(int x , int y){ to[++cnt] = y; next[cnt] = head[x]; head[x] = cnt;}void dfs1(int x , int fa){ int i; si[x] = 1; for(i = head[x] ; i ; i = next[i]) { if(to[i] != fa) { dfs1(to[i] , x); si[x] += si[to[i]]; f[x] += f[to[i]] + si[to[i]]; } }}void dfs2(int x , int fa){ int i; for(i = head[x] ; i ; i = next[i]) { if(to[i] != fa) { g[to[i]] = g[x] + n - 2 * si[to[i]]; dfs2(to[i] , x); } }}int main(){ int i , x , y , ans = 0; scanf("%d" , &n); for(i = 1 ; i < n ; i ++ ) scanf("%d%d" , &x , &y) , add(x , y) , add(y , x); dfs1(1 , 0); g[1] = f[1]; dfs2(1 , 0); for(i = 1 ; i <= n ; i ++ ) if(g[ans] < g[i]) ans = i; printf("%d\n" , ans); return 0;}

转载于:https://www.cnblogs.com/GXZlegend/p/6401780.html

你可能感兴趣的文章
SQL日常问题和技巧——持续更新
查看>>
springMVC入门(一)------springMVC基本概念与安装
查看>>
Sam做题记录
查看>>
[bzoj] 2453 维护数列 || 单点修改分块
查看>>
IIS版本变迁
查看>>
BZOJ3884: 上帝与集合的正确用法 拓展欧拉定理
查看>>
mybatis09--自连接一对多查询
查看>>
myeclipse10添加jQuery自动提示的方法
查看>>
【eclipse jar包】在编写java代码时,为方便编程,常常会引用别人已经实现的方法,通常会封装成jar包,我们在编写时,只需引入到Eclipse中即可。...
查看>>
视频监控 封装[PlayCtrl.dll]的API
查看>>
软件工程APP进度更新
查看>>
Python 使用正则替换 re.sub
查看>>
CTF中那些脑洞大开的编码和加密
查看>>
简化工作流程 10款必备的HTML5开发工具
查看>>
c++ 调用外部程序exe-ShellExecuteEx
查看>>
Java进击C#——语法之知识点的改进
查看>>
IdentityServer流程图与相关术语
查看>>
BirdNet: a 3D Object Detection Framework from LiDAR information
查看>>
icon fonts入门
查看>>
【Django】如何按天 小时等查询统计?
查看>>