傳送門git
•題意
一對夫婦居住在 xx村莊,給村莊有 $n$ 個小屋;github
這 $n$ 個小屋之間有雙向可達的道路,不會出現環,即所構成的圖是個樹;數組
從 $a_i$ 小屋到 $b_i$ 小屋須要花費 $w_i$ 時間;3d
初始,女主角在 $s$ 號小屋,有 q 次詢問,每次詢問爲如下兩種的一個:code
- 0 u : 她有個孩子在 $u$ 號屋,須要媽媽接她回家,輸出從 $s$ 到 $u$ 的最短期
- 1 x val : 因爲種種緣由,第 $x$ 條道路的耗時由以前的 $w_x$ 變爲了 $val$
•題解
考慮如圖所示的結構,在樹上操做有些不便之處,因此,咱們須要將其序列化;blog
將上圖所示的樹,將其轉化成 DFS序;ci
$1\overset{w_{1,2}}{\rightarrow} 2 \overset{w_{2,4}}{\rightarrow} 4 \overset{-w_{2,4}}{\leftarrow} 2\overset{w_{2,5}}{\rightarrow}5\overset{-w_{2,5}}{\leftarrow}2\overset{-w_{1,2}}{\leftarrow}1\overset{w_{1,3}}{\rightarrow}3\overset{-w_{1,3}}{\leftarrow}1$get
並令權重沿葉子方向爲正,沿根方向爲負;it
那麼從 $u$ 第一次出現的位置到 $v$ 第一次出現的位置中,不屬於 $u,v$ 路徑上的邊就會被抵消掉;io
因而有:
$(u,v)$之間的距離 = (從 $LCA(u,v)$ 到 $u$ 的邊的權重和)+(從 $LCA(u,v)$ 到 $v$ 的邊的權重和)
由於是單點更新,因此,咱們能夠考慮到用樹狀數組來維護 DFS序;
•Code