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