記錄【P2986 [USACO10MAR] Great Cow Gathering G】
阿新 • • 發佈:2022-03-24
傳送門。
$\texttt{Description}$
給定一個棵帶權樹,點權為 $c_i$,定義一個點 $u$ 到 $X$ 的不方便程度為 $c_u$ 乘 $u$ 到 $X$ 的距離。
選擇一個點,使得所有點到這個點的不方便程度之和最小。
$1\le n\le 10^5$。
$\texttt{Solution}$
非常顯然的樹形 DP。
設 $f_i$ 表示所有點到 $i$ 的不方便程度之和。則答案為 $\min_{1\le i\le n}\{f_i\}$。
考慮轉移。
設 $g_i$ 表示以 $i$ 為根的子樹中,所有點到 $i$ 的不方便程度之和。
考慮 $u$ 的兒子 $v$,$f_v$ 首先應加上 $g_v$。這是 $v$ 子樹的貢獻。
然後應該加上 $u$ 子樹的貢獻,即 $f_u$,但發現在 $v$ 子樹中算重,應該再減掉 $v$ 的貢獻,即 $g_v$。
我們發現還是有一部分會被多算,即 $u,v$ 之間的長度,所以再應減去 $sum_v\times w$,其中 $sum_i$ 表示子樹 $i$ 中所有點的點權和。
但是 $u,v$ 這條邊應該被放在以 $v$ 為根時 $u$ 子樹每個點的貢獻裡,所以應該加上 $(S-sum_v)\times w$。
可能說的有點繞……不過個人感覺換根 $\texttt{DP}$ 重點在於畫圖。
最終轉移方程為 $f_v=f_u+w\times(S-2\times sum_v)$。(移項之後)