樹上兩點期望距離

2022-04-07 22:46:56 字數 1144 閱讀 9164

對於樹上的節點\(i\),設\(d[i]\)為\(i\)的度數,\(fa\)為\(i\)的父親,\(\sum\limits_ j\)為\(i\)的兒子。

假設邊權均為\(1\)。

分別考慮兒子到父親、父親到兒子的期望。

設\(f[i]\)表示兒子\(i\)到父親的期望距離。

可以分為\(2\)種情況:

直接到父親。

概率為\(\dfrac\),步數為\(1\),期望為\(\dfrac\)

先到兒子\(j\),再回到自己,再到父親。

概率為\(\dfrac}\),步數為\(1+f[j]+f[i]\),期望為\(\dfrac}\)

綜上,\(f[i] = \dfrac}\)

移項可得:

\(f[i] = d[i] + \sum\limits_ f[j]\)

設\(g[i]\)表示父親到兒子\(i\)的期望距離。

可以分為\(3\)種情況:

直接到該兒子。

概率為\(\dfrac\),步數為\(1\),期望為\(\dfrac\)

先到父親,再回到自己,再到該兒子。

概率為\(\dfrac\),步數為\(1+g[fa]+g[i]\),期望為\(\dfrac\)

先到另乙個兒子,再回到自己,再到該兒子。

概率為\(\dfrac}\),步數為\(1+f[j]+g[i]\),期望為\(\dfrac(1+f[j]+g[i])}\)

綜上,\(g[i] = \dfrac(1+f[j]+g[i])}\)

移項可得:

\(g[i] = g[fa]+d[fa]+\sum\limits_f[j]\)

將路徑\(u \rightarrow v\)拆成\(u \rightarrow lca\),\(lca \rightarrow v\),

路徑\(u \rightarrow lca\)為兒子到父親,路徑\(lca \rightarrow v\)為父親到兒子。

所以,答案即為:

$\sum\limits_f[i] + \sum\limits_g[i] $

其中\(f[葉子節點]=1\),\(g[根節點]=1\)

用樹上字首和維護即可。

\(ans = f[u]+g[v]-f[lca]+g[lca]\)

樹上兩點期望距離

求樹上兩點之間的期望距離。設d i 為i節點的度數。fa i 為i節點的父親。我們對於兩種不同的走法分別考慮。part1 兒子到父親 設此時期望步數為f i 顯然,只會有兩種情況 1.直接一步走到父親。2.先走到自己的兒子,再走回自己,再走到父親。對於情況1.概率為 frac 步數為1,期望為 fr...

1102 兩點距離

兩點距離 time limit 1000ms memory limit 65536k total submit 495 accepted 227 description 輸入4個絕對值在1000000以內的整數 x1,y1,x2,y2,輸出平面座標系中點 x1,y1 到點 x2,y2 之間的距離 保...

1279 兩點距離

1279 兩點距離 description 輸入4個絕對值在1000000以內的整數x1,y1,x2,y2輸出平面座標系中點 x1,y1 到點 x2,y2 之間的距離 保留三位小數 input 輸入4個整數x1,y1,x2,y2。output 輸出平面座標系中點 x1,y1 到點 x2,y2 之間的...