Address
洛谷 P3642
BZOJ 4585
UOJ #205
LOJ #2568
Solution
- NOIP 2018 之后 A 掉的第一道题,祭
- 看上去是水题,但是发现边权可以减一之后就不是那么容易了
- 很容易想到状态: f [ u ] [ i ] f[u][i] f[u][i] 表示把 u u u 到子树内所有叶子的距离都调成 i i i 的最小代价(下面 l e n ( u , v ) len(u,v) len(u,v) 为边 ( u , v ) (u,v) (u,v) 的长度)
- f [ u ] [ i ] = ∑ v ∈ s o n ( u ) max j = 0 i { f [ j ] + ∣ l e n ( u , v ) − ( i − j ) ∣ } f[u][i]=\sum_{v\in son(u)}\max_{j=0}^i\{f[j]+|len(u,v)-(i-j)|\} f[u][i]=v∈son(u)∑j=0maxi{ f[j]+∣len(u,v)−(i−j)∣}
可以大胆猜想f [ u ] f[u] f[u] 是关于 i i i 的下凸函数- 假设 u u u 只有 v v v 一个子节点
- 设 i ∈ [ l , r ] i\in[l,r] i∈[l,r] 时 f [ v ] f[v] f[v] 取得最小值
- 然后分类讨论一下转移:
- (1) 0 ≤ i ≤ l 0\le i\le l 0≤i≤l
- 这时候 j ∈ [ 0 , i ] j\in[0,i] j∈[0,i] ,最优的方案是把 ( u , v ) (u,v)