题目大意
给出一棵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值也是很好计算的。用同样的方法维护一下,我们就可以实现自下而上的递推了。
时间复杂度