[Luogu] P1131 [ZJOI2007]时态同步
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\)!