/* 返回顶部 */

树上两点期望距离

对于树上的节点\(i\),设\(d[i]\)\(i\)的度数,\(fa\)\(i\)的父亲,\(\sum\limits_{son} j\)\(i\)的儿子。

假设边权均为\(1\)

分别考虑儿子到父亲、父亲到儿子的期望。


\(F[i]\)表示儿子\(i\)到父亲的期望距离。

可以分为\(2\)种情况:

  1. 直接到父亲。

    概率为\(\dfrac{1}{d[i]}\),步数为\(1\),期望为\(\dfrac{1}{d[i]}\)

  2. 先到儿子\(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\)种情况:

  1. 直接到该儿子。

    概率为\(\dfrac{1}{d[fa]}\),步数为\(1\),期望为\(\dfrac{1}{d[fa]}\)

  2. 先到父亲,再回到自己,再到该儿子。

    • 走到父亲,步数为\(1\)
    • 回到自己,步数为\(G[fa]\)
    • 走到该儿子,步数为\(G[i]\)

    概率为\(\dfrac{1}{d[fa]}\),步数为\(1+G[fa]+G[i]\),期望为\(\dfrac{1+G[fa]+G[i]}{d[fa]}\)

  3. 先到另一个儿子,再回到自己,再到该儿子。

    • 走到另一个儿子,步数为\(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]\)

posted @ 2020-08-01 13:08  Mogeko  阅读(306)  评论(0编辑  收藏  举报