bzoj1131: [POI2008]Sta

给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大
Input
给出一个数字N,代表有N个点.N<=1000000 下面N-1条边.
Output
输出你所找到的点,如果具有多个解,请输出编号最小的那个.
Sample Input
8

1 4

5 6

4 5

6 7

6 8

2 4

3 4
Sample Output
7

题意简单粗暴
适合本蒟蒻的一道大水题

我们考虑先dfs一遍求出所有节点以1(随便选)为根节点的的深度之和。
接着我们考虑根节点从一个点的父亲转移到这个点深度会发生什么变化?
显然以这个点为根的子树中所有的节点深度减一,其余节点深度加1
所以我们得到
f[i]=f[fa[i]]-siz[i]+(n-siz[i])
=>f[i]=f[fa[i]]+n-2*siz[i]
所以只要在第一次dfs时顺便求出以I为根节点的子树的的大小就好

include

include

include

include

include

include

include

include

include

include

using namespace std; <

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值