loading...

待定系数法处理有后效性的树形 DP

一般的有后效性 DP 使用高斯消元求解线性方程组是 \(\mathcal O(n^3)\) 的,树形 DP 的后效性往往更好处理。

树上解方程

一般形式:在每个节点 \(u\) 上有一个方程,\(c_u+\displaystyle\sum_{(u,v) \in E} a_{u,v}x_v=x_u\)。求解方程。

具体给一道题:

PKUWC2018 随机游走

给定一棵树,\(Q\) 次询问,每次询问给出点集 \(S\),求从 \(x\) 出发,每步等概率走向相邻节点,将 \(S\) 中的点全部遍历一次的步数期望值模 \(998244353\)

\(1 \le Q \le 5000\)\(1 \le x \le n \le 18\)

这道题通过 \(\text{Min-Max}\) 容斥可以转化成对所有非空集合 \(T \subseteq V\) 求遍历到 \(T\) 集合中的点所需要的期望步数。

假设当前枚举到 \(T\)。令 \(f_u\) 表示当前走到点 \(u\),到 \(T\) 集合中的点期望还需要走 \(f_u\) 步。

转移为:\(f_u=1+\dfrac{1}{\deg_u}\displaystyle\sum_{(u,v) \in E}f_v\)。有后效性,单独把 \(\mathrm{fa}_u\) 提出来。

直接假设 \(f_u\overset{\Delta}=k_uf_{\mathrm{fa}_u}+b_u\)

\[\begin{aligned} \therefore \ &f_{\mathrm{fa}_u}=\dfrac{f_u-b_u}{k_u}\\ f_u&=\dfrac{1}{\deg_u}\left(f_{\mathrm{fa}_u}+\sum_{\mathrm{fa}_v=u} f_v\right)+1\\ \deg_uf_u&=\deg_u+f_{\mathrm{fa}_u}+\sum_{\mathrm{fa}_v=u}k_vf_u+b_v\\ \dfrac{1}{k_u}f_u-\dfrac{b_u}{k_u}&=(\deg_u-\sum k_v)f_u-\deg_u-\sum{b_v}\\ \Rightarrow&\begin{cases} k_u=\dfrac{1}{\deg_u-\sum k_v}\\ b_u=\dfrac{\deg_u+\sum b_v}{\deg_u-\sum k_v} \end{cases} \end{aligned} \]

可见 \(k_u,b_u\) 递推式只与子节点有关而与父亲无关,直接 \(\tt dfs\) 一遍就可以得到。边界对 \(u \in T,k_u=b_u=0\),因为 \(f_u=0\)。显然叶子节点 \(u\) 处方程同样成立,易知 \(k_u=b_u=1\)

最后 \(x\) 因为没有父亲节点,所以 \(f_x=b_x\)

posted @ 2025-05-05 14:33  goldspade  阅读(28)  评论(0)    收藏  举报