因为打模拟赛做期望题猪脑过载了,所以来写一个。
因为博主的生成函数基础为 \(0\),所以写的比较笨,欢迎大家拷打。
不会有人高二了连这都不会吧
树上随机游走步数 \(k\) 次方期望:
假设你现在在一棵树的节点 \(u\) 上,每次你有 \(p_u\) 的概率站在原地不动,\(1-p_u\) 的概率等概率随机走到一个相邻的点。
对于每个点 \(i\geq 2\),求出 \(f_i\) 表示以 \(i\) 为起点,走到 \(1\) 的步数的 \(k\) 次方的期望。
\(\boldsymbol{k=1}\) 的情况
这是一个更为经典的问题
做法有两种:
- 直接设 \(f_u\) 表示以 \(u\) 为起点到节点 \(1\) 的期望步数,有:\(f_u=p_uf_u+\dfrac{1-p_u}{deg_u}\sum\limits_{(u,v)\in E} f_v\)。我们待定系数,设 \(f_u=A_uf_{\text{fa}_i}+B_u\),由于 \(f_0=0\),所以从下到上求出 \(A_u\) 和 \(B_u\) 之后,就可以从上到下求出 \(f_u\)。
- 设 \(f_u\) 表示 \(u\) 到 \(\text{fa}_u\) 的期望步数,直接列出式子:\(f_u=p_uf_u+\dfrac{1-p_u}{deg_u}\sum\limits_{(u,v)\in E\land v\neq \text{fa}_u} (f_v+f_u)+1\),这个可以直接从下到上转移。最后对 \(u\) 的所有祖先做前缀和即可。
扩展到 \(\boldsymbol{k>1}\) 的情况
如何求出步数的 \(k\) 次方?此处我们把每条从 \(u\) 到 \(1\) 的路径看做一个组合对象,记一条路径为 \(T\),所有路径构成的集合为 \(\mathcal{S}_u\)。一条路径的概率为 \(p(T)\),长度为 \(l(T)\),我们需要求的是:
\[f_{u,k}=\sum_{T\in \mathcal{S}_u}p(T)l(T)^k \]考虑当一个对象集拼上一条边之后,权值发生的变化。
\[\sum_{T\in \mathcal{S}_u}p(T)(l(T)+1)^k=\sum_{i=0}^k \sum_{T\in \mathcal{S}_u}p(T)l(T)^i\binom{k}{i}=\sum_{i=0}^k f_{u,i}\binom{k}{i} \]拼上一条路径仍然如此:
\[\sum_{T_1\in \mathcal{S}_{u_1},T_2\in \mathcal{S}_{u_2}}p(T_1)p(T_2)(l(T_1)+l(T_2))^k=\sum_{i=0}^k f_{u_1,i}f_{u_2,i}\binom{k}{i} \]假如我们用符号化方式写出上面的转移式子(\(\varepsilon\) 用来描述一条边):
- \(F_u=p_u(\varepsilon\times F_u)+\dfrac{1-p_u}{deg_u}\sum\limits_{(u,v)\in E} (\varepsilon\times F_v)\)。
- \(F_u=p_u (\varepsilon\times F_u)+\dfrac{1-p_u}{deg_u}\sum\limits_{(u,v)\in E\land v\neq \text{fa}_u} (\varepsilon\times F_v\times F_u)\)。
根据上面对权值的分析,可以分别得到两种方法的转移方程,从而不难使用消元技巧解决问题,此处略去。由于做运算的复杂度为 \(\mathcal{O}(k^2)\) 单次,最后的复杂度是 \(\mathcal{O}(nk^2)\)。
更优的做法
第二种做法基本没救。不过第一种做法的操作仅有拼接 \(\varepsilon\)。
在拼接 \(\varepsilon\) 的操作中,维护下降幂(即组合数)要比维护普通幂有这明显的优势。为什么这么说呢?重新定义:
\[f_{u,k}=\sum_{T\in \mathcal{S}_u}p(T)\binom{l(T)}{k} \]观察这个定义的转移:
\[\sum_{T\in \mathcal{S}_u}p(T)\binom{l(T)+1}{k}=\sum_{T\in \mathcal{S}_u} p(T)\left(\binom{l(T)}{k}+\binom{l(T)}{k-1}\right)=f_{u,k}+f_{u,k-1} \]这样你可以 \(\mathcal{O}(1)\) 完成与 \(\varepsilon\) 的操作。
众所周知下降幂和普通幂是可以相互转化的,所以求出下降幂的答案就可以了!
注意到如果直接做的话可能要待定 \(f_{\text{fa}_u,0\sim k}\),不过其实可以先处理完 \(0\sim k-1\) 再处理 \(k\),然后做类似 \(k=1\) 的过程即可 \(\mathcal{O}(nk)\)。
标签:varepsilon,期望,text,sum,mathcal,binom,一点,步数,不会 From: https://www.cnblogs.com/yllcm/p/17785345.html