1. 程式人生 > 其它 >記錄【P2986 [USACO10MAR] Great Cow Gathering G】

記錄【P2986 [USACO10MAR] Great Cow Gathering G】

傳送門

$\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)$。(移項之後)