2025.1.24

树上背包

DESTRUCTION 3,2,1

09 年论文现在才学也是没救了。

对于重量为 \(1\) 的,直接每次枚举 size 就可以做到 \(n^2\),证明考虑一个点对只会在 lca 出有一个贡献。

考虑重量是 \(v_i\),定义 \(v_i\) 的上界是 \(V\)

暴力做是 \(nV^2\) 的,实在是不优美。

考虑更改更新顺序为从顶到底可以做到 \(nV\),具体实现有两种。

考虑推到 dfs 序上,设 \(dp_{i,j}\) 表示当前到 \(i\) 点,重量是 \(j\),转移考虑刷表,枚举这个点选不选考虑贡献到 \(i + 1\) 或者 \(i + sz\)(这个点不选不能选子树)。

也可以不用 dfs 序,考虑依次做每个儿子,最后和自己取 max。

缺点是空间复杂度没在压了。

P

posted @ 2025-01-24 08:04  5k_sync_closer  阅读(70)  评论(4编辑  收藏  举报