CF708C Centroids

一、题目

点此看题

翻译有点问题,重心应该是每个子树都小于等于 n / 2 n/2 n/2的点

二、解法

点数大于 n / 2 n/2 n/2的子树只有一个,枚举每个点的所有子树,找出这个子树内最大的子树,但是要求节点数小于 n / 2 n/2 n/2,这样我们就可以把它接在当前点上,然后用 s i z [ v ] − siz[v]- siz[v]这个值判断是否小于 n / 2 n/2 n/2

d p [ u ] dp[u] dp[u]为这个值,可以用换根维护每个点为根的情况,先可以处理出 1 1 1点为根的状态,由于从 u u u换到 v v v的时候需要判断 d p [ u ] dp[u] dp[u]是否从 v v v处转移过来的,维护一个次小值和最小值的转移方向,然后就可以换根了,附上转移方程:
d p [ u ] = max ⁡ { d p [ v ] s i z [ v ] > n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值