树上两点期望距离
对于树上的节点\(i\),设\(d[i]\)为\(i\)的度数,\(fa\)为\(i\)的父亲,\(\sum\limits_{son} j\)为\(i\)的儿子。
假设边权均为\(1\)。
分别考虑儿子到父亲、父亲到儿子的期望。
设\(F[i]\)表示儿子\(i\)到父亲的期望距离。
可以分为\(2\)种情况:
-
直接到父亲。
概率为\(\dfrac{1}{d[i]}\),步数为\(1\),期望为\(\dfrac{1}{d[i]}\)
-
先到儿子\(j\),再回到自己,再到父亲。
- 走到儿子,步数为\(1\);
- 回到自己,步数为\(F[j]\);
- 走到父亲,步数为\(F[i]\)。
概率为\(\dfrac{\sum\limits_{son}}{d[i]}\),步数为\(1+F[j]+F[i]\),期望为\(\dfrac{\sum\limits_{son}{(1+F[j]+F[i])}}{d[i]}\)
综上,
\(F[i] = \dfrac{1+\sum\limits_{son}{(1+F[j]+F[i])}}{d[i]}\)
移项可得:
\(F[i] = d[i] + \sum\limits_{son} F[j]\)
设\(G[i]\)表示父亲到儿子\(i\)的期望距离。
可以分为\(3\)种情况:
-
直接到该儿子。
概率为\(\dfrac{1}{d[fa]}\),步数为\(1\),期望为\(\dfrac{1}{d[fa]}\)
-
先到父亲,再回到自己,再到该儿子。
- 走到父亲,步数为\(1\);
- 回到自己,步数为\(G[fa]\);
- 走到该儿子,步数为\(G[i]\)。
概率为\(\dfrac{1}{d[fa]}\),步数为\(1+G[fa]+G[i]\),期望为\(\dfrac{1+G[fa]+G[i]}{d[fa]}\)
-
先到另一个儿子,再回到自己,再到该儿子。
-
走到另一个儿子,步数为\(1\);
-
回到自己,步数为\(F[j]\);
-
走到该儿子,步数为\(G[i]\)。
概率为\(\dfrac{\sum\limits_{son\not=i}}{d[fa]}\),步数为\(1+F[j]+G[i]\),期望为\(\dfrac{\sum\limits_{son\not=i}(1+F[j]+G[i])}{d[fa]}\)
-
综上,
\(G[i] = \dfrac{1+(1+G[fa]+G[i])+\sum\limits_{son\not=i}(1+F[j]+G[i])}{d[fa]}\)
移项可得:
\(G[i] = G[fa]+d[fa]+\sum\limits_{son\not=i}F[j]\)
将路径\(u \rightarrow v\)拆成\(u \rightarrow LCA\),\(LCA \rightarrow v\),
路径\(u \rightarrow LCA\)为儿子到父亲,路径\(LCA \rightarrow v\)为父亲到儿子。
所以,答案即为:
$\sum\limits_{u\rightarrow LCA}F[i] + \sum\limits_{LCA\rightarrow v}G[i] $
其中\(F[叶子节点]=1\),\(G[根节点]=1\)
用树上前缀和维护即可。
\(ans = F[u]+G[v]-F[LCA]+G[LCA]\)