待定系数法处理有后效性的树形 DP
一般的有后效性 DP 使用高斯消元求解线性方程组是 \(\mathcal O(n^3)\) 的,树形 DP 的后效性往往更好处理。
树上解方程
一般形式:在每个节点 \(u\) 上有一个方程,\(c_u+\displaystyle\sum_{(u,v) \in E} a_{u,v}x_v=x_u\)。求解方程。
具体给一道题:
给定一棵树,\(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\)。
可见 \(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\)。

浙公网安备 33010602011771号