树
题面
题意
树上一点随机游走到另一点距离的期望
样例
Sample.in
4 2 1 2 2 3 3 4 1 4 3 4
Sample.out
4 2 1 2 2 3 3 4 1 4 3 4
题解
考虑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板子就好了