\(\text{hdu-4035}\)
在一棵树上随机游走,从根节点 \(1\) 出发,每次有 \(k_u\) 的几率回到根节点,\(e_u\) 的几率到达出口,否则随机选择一个与它相连的节点并走过去,求期望多少步能走到出口。
\(1 \le n \le 10^4\)。
暴力推式子题。
令 \(t_u = 1 - k_u - e_u\),记 \(f_u\) 表示从 \(u\) 出发走到出口的期望步数,\(p\) 为 \(u\) 的父亲,\(v\) 为 \(u\) 的儿子,\(d_u\) 为 \(u\) 的度数,则有:
\[\begin{align}
f_u &= k_u f_1 + t_u \sum_{v \in son(u)} \frac{f_v + 1}{d_u} + t_u \frac{f_p + 1}{d_u} \\
&= k_u f_1 + \frac{t_u}{d_u} \left(f_p + 1 + \sum_{v \in son(u)} (f_v + 1) \right) \\
&= k_u f_1 + \frac{t_u}{d_u} f_p + \frac{t_u}{d_u} \sum_{v \in son(u)} f_v + t_u
\end{align}
\]
这个式子没法直接算,考虑令 \(f_u = a_u f_1 + b_u f_p + c_u\),目的是把 \(f_v\) 消掉让这个式子可以转移。
若 \(u\) 为叶子节点,显然有 \(d_u = 1, son(u) = \varnothing\),因此 \(a_u = k_u, b_u = c_u = t_u\)。
对于非叶子节点 \(u\),考虑拆掉 \(\sum\limits_{v \in son(u)} f_v = f_1 \sum a_v + f_u \sum b_v + \sum c_v\),有:
\[\begin{align}
f_u &= k_u f_1 + \frac{f_u}{d_u} f_p + \frac{t_u}{d_u} \sum_{v \in son(u)} f_v + t_u \\
f_u &= k_u f_1 + \frac{f_u}{d_u} f_p + \frac{t_u}{d_u} \left(f_1 \sum_{v \in son(u)} a_v + f_u \sum_{v \in son(u)} b_v + \sum_{v \in son(u)} c_v \right) + t_u \\
f_u &= \left(k_u + \frac{t_u}{d_u} \sum_{v \in son(u)} a_v \right) \cdot f_1 + \frac{t_u}{d_u} \cdot f_p + \left(\frac{t_u}{d_u} \sum_{v \in son(u)} b_v \right) \cdot f_u + \left(t_u + \frac{t_u}{d_u} \sum_{v \in son(u)} c_v \right) \\
\left(1 - \frac{t_u}{d_u} \sum_{v \in son(u)} b_v \right) \cdot f_u &= \left(k_u + \frac{t_u}{d_u} \sum_{v \in son(u)} a_v \right) \cdot f_1 + \frac{t_u}{d_u} \cdot f_p + \left(t_u + \frac{t_u}{d_u} \sum_{v \in son(u)} c_v \right) \\
f_u &= \frac{k_u + \frac{t_u}{d_u} \sum a_v}{1 - \frac{t_u}{d_u} \sum b_v} \cdot f_1 + \frac{t_u d_u^{-1}}{1 - \frac{t_u}{d_u} \sum b_v} \cdot f_p + \frac{t_u + \frac{t_u}{d_u} \sum c_v}{1 - \frac{t_u}{d_u} \sum b_v}
\end{align}
\]
那么就有了:
\[\begin{align}
a_u &= \frac{k_u + \frac{t_u}{d_u} \sum a_v}{1 - \frac{t_u}{d_u} \sum b_v} \\
b_u &= \frac{t_u d_u^{-1}}{1 - \frac{t_u}{d_u} \sum b_v} \\
c_u &= \frac{t_u + \frac{t_u}{d_u} \sum c_v}{1 - \frac{t_u}{d_u} \sum b_v}
\end{align}
\]
然后就发现可以树形 dp 了,而且完全不需要计算 \(f_u\),因为答案为 \(f_1 = a_1 f_1 + c_1\),即 \(f_1 = \frac{c_1}{1 - a_1}\)。
无解情况有三种:\(d_u = 0\) 或 \(1 - \frac{t_u}{d_u} \sum b_v = 0\) 或 \(a_1 = 1\)。
