[ARC195E] Random Tree Distance
题目大意
一棵树上每个点的父亲 fa[i]fa[i]fa[i],满足 1<=fa[i]<i1<=fa[i]<i1<=fa[i]<i。因此一棵 nnn 个点的树有 (n−1)!(n-1)!(n−1)! 种可能。
现在告诉你每个点连向父亲的边的边权 WiW_iWi。给你 QQQ 对 (u,v)(u,v)(u,v) 让你求出每一对 (u,v)(u,v)(u,v) 在所有可能可能情况下的距离和。
思路
有一个比较常见的思路,就是把总和转换成期望值,然后把统计出来的期望值乘上情况的总数即可。
两个点的距离往往会这样写:dist(u,v)=d[u]+d[v]−2×d[lca(u,v)]dist(u,v)=d[u]+d[v]-2\times d[lca(u,v)]dist(u,v)=d[u]+d[v]−2×d[lca(u,v)]
那么有 E(dist(u,v))=E(d[u])+E(d[v])−2×E(d[lca(u,v)])E(dist(u,v)) = E(d[u])+E(d[v])-2\times E(d[lca(u,v)])E(dist(u,v))=E(d[u])+E(d[v])−2×E(d[lca(u,v)])
我们发现每个点深度的期望值 E(d[u])E(d[u])E(d[u]) 可以计算出来,为 E(d[i])=1n−1∑j=1n−1E(d[j])+WiE(d[i])=\frac{1}{n-1}\sum_{j=1}^{n-1}E(d[j])+W_iE(d[i])=n−11∑j=1n−1E(d[j])+Wi ,特别地,E(d[0])=0E(d[0])=0E(d[0])=0。
接下来我们我们要计算 E(d[lca(u,v)])E(d[lca(u,v)])E(d[lca(u,v)]),不妨设 u<vu < vu<v。
因为可能成为 lca(u,v)lca(u,v)lca(u,v) 的点有 1,2,3,...,u1,2,3,...,u1,2,3,...,u,因此我们只需要计算出每个点成为 lca(u,v)lca(u,v)lca(u,v) 的概率 PiP_iPi 就有,E(d[lca(u,v)])=∑i=1uDi×PiE(d[lca(u,v)])=\sum_{i=1}^uD_i\times P_iE(d[lca(u,v)])=∑i=1uDi×Pi。
接下来就要去求出 PiP_iPi。
我在做这题的时候是先分析出了 Pu=1uP_u=\frac{1}{u}Pu=u1,然后打表直接得到对于 1<=i<u1<=i<u1<=i<u,有 Pi=1i×(i+1)P_i=\frac{1}{i\times(i+1)}Pi=i×(i+1)1。
现在来讲讲出现这个概率的原因。
- Pu=1uP_u=\frac{1}{u}Pu=u1
考虑从 vvv 一直往前跳,如果跳到一个 i(u<i<j)i(u<i<j)i(u<i<j),那么不会有任何的影响;如果某一次跳到了 i(i<=u)i(i<=u)i(i<=u),那么就有可能是 uuu,也有可能是 uuu 前面的点,因为最后这一跳有 uuu 个点可以选择,因此跳到 uuu 的概率就是 1u\frac{1}{u}u1。
- Pi=1i×(i+1)(1<=i<u)P_i=\frac{1}{i\times(i+1)}(1<=i<u)Pi=i×(i+1)1(1<=i<u)
令 fi(1<=i<=u)f_i(1<=i<=u)fi(1<=i<=u),表示 lca(u,v)>=ilca(u,v)>=ilca(u,v)>=i 的概率,那么显然有 fu=1uf_u=\frac{1}{u}fu=u1
考虑 1<=i<u1<=i<u1<=i<u,有两种可能的情况发生:第一种是已经满足 lca(u,v)>=ilca(u,v) >= ilca(u,v)>=i,第二种是不满足 lca(u,v)>=ilca(u,v)>=ilca(u,v)>=i 但是两个路径最后一跳都刚好到达了 iii,因此有 fi=fi+1+(1−fi+1)(1i)2f_i=f_{i+1}+(1-f_{i+1})(\frac{1}{i})^2fi=fi+1+(1−fi+1)(i1)2
根据数学归纳即可得到 fi=1if_i=\frac{1}{i}fi=i1,作差可得 Pi=fi−fi+1=1i×(i+1)(1<=i<u)P_i=f_{i}-f_{i+1}=\frac{1}{i\times(i+1)}(1<=i<u)Pi=fi−fi+1=i×(i+1)1(1<=i<u)
因为这个概率与 vvv 的值无关,因此可以预处理出来。
代码