P4657 [CEOI2017] Chase 题解
树形 dp。
首先,追逐者遇到的铁球的数量显然不会少于逃亡者遇到的铁球数量。
令 \(ss_i\) 表示与 \(i\) 相邻的点的权值之和。\(\mathcal{O}(n^2v)\) 的 dp 是很简单的。
令 \(dp_{i,j,0/1}\) 表示根节点到 \(i\) 的路径上,用了 \(j\) 次磁铁,当前节点选 / 不选的最大值。转移是简单的。
加上 \(\mathcal{O}(n)\) 的枚举根节点,时间复杂度就是 \(\mathcal{O}(n^2v)\) 的了。
参考暴力 dp 的定义方式,对其进行优化。令 \(f_{i,j,0/1}\) 表示从 \(i\) 走到 \(i\) 的子树中,用了 \(j\) 次磁铁,在 \(i\) 处用 / 没用。\(g_{i,j,0/1}\) 则表示 \(i\) 的子树走到 \(i\) 的答案。
则有转移方程:
\(f_{u,i,0}=\max\limits_{v\in \{son_u\}}\{f_{v,i,0},f_{v,i,1}\}\),\(f_{u,i,1} = \max\limits_{v\in \{son_u\}}\{f_{v,i-1,0},f_{v,i-1,1}\}+ss_u-a_{fa}\)。
\(g_{u,i,0}=\max\limits_{v\in \{son_u\}}\{g_{v,i,0},g_{v,i,1}\}\),\(g_{u,i,1}=\max\limits_{v\in \{son_u\}}\{g_{v,i-1,0}-a_v,g_{v,i-1,1}-a_v\}+ss_u\)。
然后考虑怎么统计答案。
由于直接统计可能会导致路径重复,可以在转移时统计答案。具体地,可以使 \(ans\) 对 \(\max(f_{v,i,0},f_{v,i,1})+\max(g_{u,j,0},g_{u,j,1})\) 和 \(\max(g_{v,i,0},g_{v,i,1})+\max(f_{u,j,0},f_{u,j,1}+a_{fa}-a_v)\) 取 \(\max\),在统计了答案后再转移,就可以使每条路径不重复统计,因为是对儿子 \(v_i\) 之前的所有满足 \(j<i\) 的 \(v_j\) 做统计。但是如果直接枚举 \(i, j\) 的话,是有 \(\mathcal{O}(v^2)\) 的复杂度的,在递推时做一个前缀 \(\max\) 即可。