题目大意
给出一棵
n
个点的树。
若某一时刻你在点
给出
n,p⋅q<50000
分析
我的想法是暴力模拟 1000 步,结果爆零了。然而模拟 3000 步可以捞到 30 分= =
根据期望的线性性,可以发现每个询问可以分解成求若干个起点到对应终点的期望时间,然后加起来就是改询问的答案。
不妨记
E(x)
为
x
到终点的期望时间。那么可以列出式子
其中
dx
表示点
x
的度数。
注意条件那里的
那么接下来的就是带入 E(T)=0 ,然后高斯消元解出 E(S) 就可以了。
然而考虑这里是一棵树,尤其是消元的过程十分的特殊。
叶子的等式
E(x)=E(fax)+1
倒数第二层的等式
E(x)
=∑(x,y)∈EE(y)dx+E(fax)dx+1
=∑(x,y)∈EE(x)+1dx+E(fax)dx+1
=dx−1dx(E(x)+1)+E(fax)dx+1
=(dx−1)+E(fax)+dx
=E(fax)+2dx−1
它化成了一种 E(fax)+b 的形式。这启示我们是否可以沿着这个思路想下去。
假如现在有任意一个点
x
我们要推出
E(x)
=∑(x,y)∈EE(y)dx+E(fax)dx+1
=∑(x,y)∈EE(x)+bydx+E(fax)dx+1
=E(fax)+∑(x,y)∈Eby+dx
成功地化成了
E(fax)+b
的形式。而且我们发现
bx
的值就是
x
这棵子树的度数和。
那么剩下的就是从终点开始递推回来了。我们发现从
直接移项肯定是有问题的。这些等式都是根据 E(T)=0 消出来的。也就是说 E(T) 本身不存在等式可以供你移项。其它移项后的等式就更加是子虚乌有了。
不妨考虑旋根。当然这里我们不是真正意义上的旋根,只是在脑中把它旋过来。我们发现旋转后的新的 b 值也是很好计算的。用同样的方法维护一下,我们就可以实现自下而上的递推了。
时间复杂度