树形 $dp$ .
- 设 $f(i,j)$ 表示将子树 $i$ 内除了最上面 $j$ 层,其余关键点都被覆盖的最小代价.
- $g(i,j)$ 表示子树 $i$ 内所有关键点都已被覆盖,并且还向上覆盖了 $j$ 层的最小代价.
- 当前处理节点为 $u$ ,其中一个儿子节点为 $v$ ,有转移 $g(u,j)=\min(g(u,j)+f(v,j), f(u,j+1)+g(v,j+1)),f(u,j)=\sum f(v,j-1)$ .
- 第一个转移表示让子树 $v$ 内的点来覆盖原来需要覆盖的 $j$ 层.第二个转移比较显然.
- 最后再贪心考虑 $f,g$ 的前缀/后缀和,即 $f(u,j)\leftarrow f(u,j-1),g(u,j)\leftarrow g(u,j+1)$ .
1 |
|