[Luogu] P1131 [ZJOI2007]时态同步

\(Link\)

Description

给一颗树,带边权,树根是 \(S\)

每次可以给一条边权\(+1\) 并花费 \(1\) 的代价,求最小代价使得 \(S\) 到所有叶子距离相等。

Solution

首先\(S\)到所有叶子的距离一定是\(max\_dep\)。然后我们肯定尽量把深度浅的边权\(+1\)

这时我们设\(dp[x]\)为使\(x\)到以\(x\)为根的子树中所有的叶子距离相等的最小代价,\(mx[x]\)表示以\(x\)为根的子树中深度最大的叶子节点的深度。那么有

\[dp[x]=\sum{dp[y]+mx[x]-mx[y](y\in{sonx})} \]

\(dp\)策略就是先让\(x\)的所有子树(以\(y\)为根)的叶子到\(y\)的距离相等,再把\(x\)\(y\)的边贪心加,使这时\(x\)到它的所有叶子距离相等)

最后答案就是\(dp[S]\)。答案记得要开\(long\ long\)

posted @ 2020-10-28 11:38  andysj  阅读(43)  评论(0编辑  收藏  举报