[PKUWC2018] 随机游走 解题报告
[PKUWC2018] 随机游走 解题报告
题意简述
给定一颗树,当前所在点 \(u\) 时,随机等概率选择一条相邻边移动。以 \(x\) 为起点,问最终达到给定点集中所有点走的步数的期望。
思路分析
首先形式化题意一下,设给定点集为 \(S\),\(u,v\in V\),\((u,v)\in E\),则求
利用 min-max 容斥 \(^{[1]}\) 进一步推导,得
于是就变成了求到达该点集中任意子集点的最小步数期望。考虑构造 DP 计算。
设 \(f(u)\) 表示从 \(u\) 出发首次到达 \(S\) 中任意一点的期望步数,那么存在两种情况,设 \(u\) 的子树集合为 \(T_S\):
- \(\exists u\in S,u\in T_S\);
- \(\forall u\in S, u\notin T_S\)
同时,由于是完全随机游走,哪怕是第一种情况也有可能访问不到 \(u\),于是对于游走本身,又存在两种情况:
- 从 \(u\) 出发,在命中 \(S\) 之前回到 \(fa\);
- 从 \(u\) 出发,要么到达目标集合 \(S\)(成功),要么回到父节点 \(fa\)(退出子树)
不妨设 \(p_u\) 为第一种情况的概率,\(e_u\) 为第二种情况的期望,于是有
考虑推导 \(p_u\) 和 \(e_u\) 的递推式。
根据定义,得到
解出 \(p_u\),得
对于 \(e_u\),考虑在根节点的情况,由于根没有父节点,于是其全期望公式为
代入 \(f_v=p_v f(u)+e_v\),得
记 \(S_a = \sum_v p_v\),\(S_b=\sum_v e_v\),则
由于此时 \(f_u=e_u\),于是有
那么代回最终答案有
由于直接进行子集枚举会导致 TLE,考虑利用高维前缀和优化:设 \(g[T]=(-1)^{|T|+1}f_T(x)\),于是就可以用 \(O(n2^n)\) 计算得到答案。
总结
本题重点在于利用待定系数法分析转移式,然后通过容斥定义解出系数的递推式。一个优化方法:使用高维前缀和加速子集容斥的计算。
注释
\([1]\):关于 min-max 容斥,其本质可以看成是用交集推导出并集,具体的,\(\max_{x\in S}x\) 可以看作对 \(S\) 中所有元素 \(x\) 的基本单位(1)的数量取并集,同理 \(\min_{x\in S}\) 就是求交集,利用基本都集合容斥关系也可以推得上述表达式。

浙公网安备 33010602011771号