【五校联考2015 8.20】宝藏

本文讨论了在树形结构中计算从一个节点到多个指定节点的期望路径时间的方法,通过分解询问并利用期望的线性性质,提出了利用高斯消元解线性方程组的策略。同时,通过旋转根的技巧实现了自底向上的递归求解,最终以O(pqlogn)的时间复杂度解决问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意

给出一棵n个点的树。
若某一时刻你在点x上,那么下一时刻你会等概率的走到任意一个相邻的点y上。
给出Q个询问,形如st p1 p2...pk,表示问从st出发,沿途依次经过p1,p2,...,pk(倘若经过p2之前到过了p3,在经过p2之后依旧要重新经过p3一次。)期望时间是多少。

n,pq<50000


分析

我的想法是暴力模拟1000步,结果爆零了。然而模拟3000步可以捞到30分= =

根据期望的线性性,可以发现每个询问可以分解成求若干个起点到对应终点的期望时间,然后加起来就是改询问的答案。

不妨记E(x)x到终点的期望时间。那么可以列出式子
E(x)=(x,y)EE(y)dx+1
其中dx表示点x的度数。
注意条件那里的E符号上与期望冲突了,但它实际上表示边集,而且注意是求和后再加一。

那么接下来的就是带入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
=dx1dx(E(x)+1)+E(fax)dx+1
=(dx1)+E(fax)+dx
=E(fax)+2dx1

它化成了一种E(fax)+b的形式。这启示我们是否可以沿着这个思路想下去。

假如现在有任意一个点x我们要推出E(x)的表达式,前提是它的孩子y都可以写成E(y)=E(fay)+by的形式。

    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这棵子树的度数和。
那么剩下的就是从终点开始递推回来了。我们发现从x的某一个祖先递推回x大致上是把这段路上的b值加起来,这个用个前缀和数组减一减就可以了。问题在于我们如何自下而上的递推呢?

直接移项肯定是有问题的。这些等式都是根据E(T)=0消出来的。也就是说E(T)本身不存在等式可以供你移项。其它移项后的等式就更加是子虚乌有了。

不妨考虑旋根。当然这里我们不是真正意义上的旋根,只是在脑中把它旋过来。我们发现旋转后的新的b值也是很好计算的。用同样的方法维护一下,我们就可以实现自下而上的递推了。

时间复杂度O(pqlogn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值