对于树上随机游走的一类研究。
我们可以考虑使用高斯消元求期望,虽然 \(O(n^3)\) 但是很有一些启发性。
就是节点的期望与父亲的期望上表述有一次性。也就是说 \(f_u = a_uf_{fa} + b_u\) 这个式子。
CF1823F Random Walk
树上随机游走,求 \(s\to t\) 的路上,\(1 \to n\) 的期望经过次数。
考虑如下式子:
\[f_t = 1
\]
\[f_u = \sum_{v \in E, v \neq t} \frac{f_v}{deg_v}
\]
\[f_s = 1 + \sum_{v \in E, v \neq t} \frac{f_v}{deg_v}
\]
利用这些可以 \(O(n ^ 3)\) 高斯消元。
然后考虑如上结论 : \(f_u = a_uf_{fa} + b_u\),注意一些 \(t\) 的情况暂时没有考虑。
\[f_u = \frac{f_{fa}}{deg_{fa}} + \sum_{v \in S}\frac{f_v}{deg_v} + [u = s]
\]
\[f_u = \frac{f_{fa}}{deg_{fa}} + \sum_{v \in S}\frac{a_vf_u + b_v}{deg_v} + [u = s]
\]
\[f_u = \frac{f_{fa}}{deg_{fa}} + \sum_{v \in S}\frac{a_v}{deg_v}f_u + \sum\frac{b_v}{deg_v} + [u = s]
\]
\[(1 - \sum_{v \in S}\frac{a_v}{deg_v})f_u = \frac{f_{fa}}{deg_{fa}} + \sum\frac{b_v}{deg_v} + [u = s]
\]
除过去即可求得 \(a_u\) 和 \(b_u\),为左右两项。根节点和叶子好求,于是就求出来了。除过去有些是 0!/fn
void dfs1 (int x, int fa) {
if (x == t) {
f[x] = 1, a[x] = invd[fa], b[x] = 0;
return ;
}
int suma = 0, sumb = (x == s);
for (int y : e[x]) {
if (y == fa) continue ;
dfs1(y, x);
if (y == t) continue ;
suma = add(suma, 1ll * a[y] * invd[y] % mod),
sumb = add(sumb, 1ll * b[y] * invd[y] % mod);
}
suma = sub(1, suma);
a[x] = 1ll * power(suma, mod - 2) * invd[fa] % mod;
b[x] = 1ll * power(suma, mod - 2) * sumb % mod;
}
void dfs2 (int x, int fa) {
if (x == t) { return ; }
f[x] = add(1ll * a[x] * f[fa] % mod, b[x]);
for (int y : e[x]) if (y != fa) dfs2(y, x);
}
登高自卑,行远自迩。

浙公网安备 33010602011771号