题面

题意

树上一点随机游走到另一点距离的期望

样例

Sample.in

4 2
1 2
2 3
3 4
1 4
3 4 
View Code

Sample.out

4 2
1 2
2 3
3 4
1 4
3 4 
View Code

题解

考虑dp,发现我们很多东西不确定。但是u -> v必定会经过lca(u,v),从这方面入手

记录 sf [ p ] 是 p 到 fa[ p ] 距离的期望,fs [ p ] 是 fa [ p ] 到 p 的期望,答案可以分为 u->lca(u,v) 的一段 sf 和 lca(u,v)->v 的一段 fs

记录 deg [ p ] 为 p 的度

对于 sf, 可以由p一步到fa[p],也可以在 p 自己的子树内乱走到 p

就是 sf [ u ]=1+( sf [ v ] ) / deg [ u ] + ( 1 - 1 / deg [u] ) * sf [ u ]

发现变成了 sf [ u ] = deg [ u ] + sf [ v ]

一开始没懂第一项的那个 1 ,其实这是因为无论如何都会至少走一步,不属于其他点的贡献,下面也是这样

对于 fs ,可以从爸爸一路过来,也可以从爸爸的子树重新上到爸爸过来

就是 fs [ u ] = 1 / deg[ fa[ u ] ] + (1+ fs[ u ] + fs[ fa[ u ] ]) / deg[ u ] + (1 + fs[ u ]+ sf[ v ]) / deg[ u ]

发现变成了 fs[ u ]  = ( 1 + deg[ u ] + fs[ fa[ u ] ] + fs [ v ]  ) / (  siz[ fa[ u ] - 1 - deg[ u ]  )

这个是上来啊,手一抖写错,然后调死了

再堆个lca板子就好了

原文地址:https://www.cnblogs.com/monyhzc/p/13428239.html