[Record] 随机游走问题入门题目

施工中……

线性随机游走

[Cnoi2020] 线形生物

关键点:期望线性性

根据题意列出期望方程如下:

\[E(x\rightarrow x+1)=\dfrac{1}{d_x+1}\cdot 1+\dfrac{1}{d_x+1}\sum_{(x,y)\in\text{Edge}}(E(y\rightarrow x+1)+1) \]

其中 \(E(x\rightarrow y)\) 表示从 \(x\)\(y\) 的期望步数,\(d_x\) 表示以 \(x\) 为起点的返祖边数量,\(\text{Edge}\) 表示返祖边集合。

根据期望的线性性,有 \(E(1\rightarrow y)=E(1\rightarrow x)+E(x\rightarrow y)\ (1\leq x<y\leq n+1)\)

代入得:

\[\begin{align*} E(x\rightarrow x+1)&=\dfrac{1}{d_x+1}\cdot 1+\dfrac{1}{d_x+1}\sum_{(x,y)\in\text{Edge}}(E(x\rightarrow x+1)+E(1\rightarrow y)-E(1\rightarrow x)+1)\\ &=\dfrac{1}{d_x+1}\sum_{(x,y)\in\text{Edge}}(E(1\rightarrow y)-E(1\rightarrow x))+\frac{d_x}{d_x+1}E(x\rightarrow x+1)+1\\ \end{align*} \]

移项:

\[\begin{align*} \frac{1}{d_x+1}E(x\rightarrow x+1)&=\dfrac{1}{d_x+1}\sum_{(x,y)\in\text{Edge}}(E(1\rightarrow y)-E(1\rightarrow x))+1\\ E(x\rightarrow x+1)&=(d_x+1)+\sum_{(x,y)\in\text{Edge}}(E(1\rightarrow y)-E(1\rightarrow x)) \end{align*} \]

[北大集训 2021] 随机游走

关键点:几何分布

很容易想到要是期望步数尽可能大,所有返祖边必须指回起点。

假设已知每个点 \(i\) 的返祖边数量为 \(b_i\),根据伯努利试验的结论,设 \(E_i\) 为从起点走到 \(i\) 的期望步数,则有转移:

\[E_{i+1}=(b_i+1)(E_i+1) \]

然后考虑 \(b\) 数组,如果 \(m<n-1\),显然给序列长度为 \(m\) 后缀每个节点分配 \(1\) 条边最优。

对于其他情况,感性理解打表可以发现最优方案:给 \(1\) 号点分配 \((\lfloor\dfrac{m}{n+1}\rfloor-1)\) 条边,其余点均匀分配剩下的边,若有剩余给后缀的每个点多分配 \(1\) 条边即可。

上面期望计算的式子可以化为后缀积的和的形式,有了 \(b\) 数组之后可以直接推式子求解或矩阵快速幂递推。

自动机随机游走

关键点:直接列出期望方程高斯消元。

[JSOI2009] 有趣的游戏

建出 \(\text{trie}\) 图,转换成在自动机上的随机游走模型。

发现考虑正推是不好做的,但是 \(\text{trie}\) 图上后继状态很容易确定,因而考虑概率倒推。

这样方程就很好设了,根据 \(\text{trie}\) 图上期望转移的权值设出方程高斯消元即可。

[SDOI2017] 硬币游戏

关键点:主元法

发现是前一题的加强。找规律太玄学了,考虑主元法。

概率正推的转移为

\[P(u)=\frac{1}{2}\sum_{v\mid<v,u>\in \text{Edge}}P(v) \]

发现每个 \(u\) 转移内除了一个 \(\text{trie}\) 树上的父亲,其余点在 \(\text{trie}\) 上的深度均大于 \(u\)

移项,表示出 \(u\) 的父亲

\[P(f_u)=2P(u)-\sum_{v\mid<v,u>\in\text{Edge}\vee v\not=f_u}P(v) \]

将每个关键点设成未知数,当两个关键点走到它们的最近公共祖先时,可以列出一个方程,这样可以列出 \(n-1\) 个方程。

又有 \(\sum_{u\in\text{Key}} P(u)=1\),凑成 \(n\) 个方程。

Boring Problem

关键点:主元法

和前两题不一样的是,这道题需要算到达关键点的步数期望,因此关键点的答案就是 \(E(u)=0\),相当于需要在关键点处列出相应的方程。

需要正推,此时节点 \(u\) 边指向的节点,只有深度小于 \(u\) 的与 \(u\) 的儿子,那么当 \(u\) 只有一个儿子时,期望的转移是确定的,否则由于 \(\text{fail}\) 边的存在,不能直接确定所有儿子的信息,需要设元。

发现在 \(u\) 处设元表示不出所有儿子,因此当 \(u\)\(k\) 个儿子时,选取其中 \(k-1\) 个设元,可以仿照上题推出剩余的儿子 \(v\) 被其余节点表达的式子。

因为

\[E(u)=(\sum_{v\mid <u,v>\in\text{Edge}}p(u,v)\cdot E(v))+1 \]

所以有

\[E(v)=\frac{E(u)-\sum_{w\mid<u,w>\in\text{Edge}\vee w\not=v}E(w)-1}{p(u,v)} \]

构造出系数矩阵按照 \(\text{bfs}\) 序转移,\(-\frac{1}{p(u,v)}\) 的常数移项到增广矩阵内即可。

网格图随机游走

关键点:直接列出期望方程高斯消元。

[ICPC 2014 WF] Pachinko

关键点:band-matrix 优化

正常按照题意列出网格图期望方程,由于 \(w\leq 20\),因此高斯消元矩阵构成带宽 \(d\leq 39\)band-matrix,时间复杂度可以优化至 \(O(w^2h)\)

Broken robot

关键点:band-matrix 优化

根据题意列出期望方程(以不在边界上的格子为例):

\[E(i,j)=\dfrac{E(i+1,j)+E(i,j-1)+E(i,j+1)+E(i,j)}{4}+1 \]

注意到只有 \(E(i+1,j)\) 在下一行,而其余变量均与 \(E(i,j)\) 在同一行,因此考虑自下而上逐行以此解方程,此时 \(E(i+1,j)\) 由于已经被解出,可以视作常量。

移项得到:

\[3E(i,j)-E(i,j-1)-E(i,j+1)=E(i+1,j)+4 \]

由于 \(E(i,j)\) 的方程只涉及到 \(E(i,j-1)\)\(E(i,j+1)\),因此高斯消元矩阵构成带宽 \(d=3\)band-matrix,直接求解即可,时间复杂度 \(O(n^2)\)

树上随机游走

「NOI模拟」树上游走

关键点:树形期望 dp

为了简化问题避免换根,可以直接将题目给定的 \(S\) 设为根节点。

容易发现这里的树形 dp 是一个类似插头的形式,可以设 \(f[u][0/1/2]\),意义如下:

  • \(f[u][0]\)\(u\) 的父亲已被删除,且此时是第一次访问 \(u\),此时的答案期望。
  • \(f[u][1]\)\(u\) 的父亲已被删除,且此时是第二次访问 \(u\),此时的答案期望。
  • \(f[u][2]\)\(u\) 的父亲未被删除,则一定是第一次访问 \(u\),此时不经过 \(u\) 的父亲的答案期望。

详细分讨转移即可。

posted @ 2025-06-30 17:00  剑履山河  阅读(23)  评论(0)    收藏  举报