【题解】 洛谷 P6835 [Cnoi2020]线形生物

一道期望dp

\(dp_i\) 表示从 \(i\) 走到 \(n+1\) 的期望步数。

我们可以设 \(k_i\) 表示 \(i\) 的出边条数,\(e_{i,j}\) 表示 \(i\) 的第 \(j\) 条返祖边的终点,那么不难得到:

\[dp_i=1+\frac{1}{k_i}\times(dp_{i+1}+\sum_j dp_{e_{i,j}}) \]

但是发现这玩意是没法转移的,因为 \(dp_i\) 的值依赖于 \(dp_{i+1}\) 的值,于是考虑把 \(dp_{i+1}\) 移到一边:

\[dp_{i+1}=k_i\times dp_i-k_i-\sum_j dp_{e_{i,j}} \]

然后由于期望的线性性,\(x\)\(y\) 的期望步数 \(E_{x,y}\) 一定可以表示为 \(\sum_{i=x}^{y-1} E_{i,i+1}\),设 \(a_i=E_{i,i+1}\),所以实质上 \(dp\) 数组是 \(a\) 的后缀合,而思考这个dp之所以不能转移是因为我们只能从 \(i=1\) 开始dp,但更新却应当是向 \(i=1\) 依次更新才对,所以这时只需将后缀和转化为前缀和即可。

那么设 \(b\)\(a\) 的前缀数组,则 \(dp_i=dp_1-b_{i+1}\),此时的 \(i\in [1,n]\),但是那个 \(+1\) 我很不喜欢,于是我设 \(f_i=b_{i+1}\),所以 \(dp_i=dp_1-f_i\)\(i\in [2,n+1]\)

\[dp_{i+1}=k_i\times (dp_1-f_{i})-k_i-\sum_j (dp_1-f_{e_{i,j}}) \]

整理一下:

\[dp_{i+1}=dp_1-k_i\times f_i-k_i+\sum_j f_{e_{i,j}} \]

\[dp_{i+1}=dp_1-f_{i+1} \]

所以:

\[f_{i+1}=k_i\times (f_i+1)-\sum_j f_{e_{i,j}} \]

\(dp_{n+1}=dp_1-f_{n+1}=0\),所以最终答案即为 \(f_{n+1}\)

posted @ 2022-08-02 22:01  wapmhac  阅读(34)  评论(0编辑  收藏  举报