P7359 「JZOI-1」旅行 题解

P7359 「JZOI-1」旅行

暴力 DP 是容易的,复杂度 \(O(n^2)\)。想要优化,因为是无根树,我们就得开两个 DP 数组,一个记录他到他爸,一个记录他爸到他的答案。

我们现在的诉求是快速求出树上一段路径的 DP 值。可以尝试倍增或树剖套广义矩阵乘法。广义矩阵乘法应该是动态 DP 里面要用的,所以这题也算半个动态 DP。

广义矩阵乘法公式为:

\[C_{i,j}=\min\{A_{i,k}+B_{k,j}\} \]

实际上就是把原 \(\sum\) 改为 \(\min\)、原 \(\times\) 改为 \(+\)

考虑如何构建矩阵。写出转移方程:

\[\begin{aligned}f_{u,0}&\gets\min(f_{v,0},f_{v,1})+a_v\\f_{u,1}&\gets\min(f_{v,0}+L,f_{v,1})+a_v\pm z_v\end{aligned} \]

所以矩阵就长这样:

\[\begin{bmatrix}f_{u,0}&f_{u,1}\end{bmatrix}=\begin{bmatrix}f_{v,0}&f_{v,1}\end{bmatrix}\times\begin{bmatrix} a_v&a_v\pm z_v+L\\ a_v&a_v\pm z_v \end{bmatrix} \]

手模一下。然后倍增就正常预处理,注意乘法顺序

posted @ 2025-02-09 11:05  Laoshan_PLUS  阅读(3)  评论(0编辑  收藏  举报