AtCoder Beginner Contest 416 - F - Paint Tree 2 题解
题意简析
在给定的树中选择最多 \(K\) 条顶点不相交的路径,使得这些路径覆盖的顶点权值之和最大化。
思路解析
考虑用树上 DP 求解。
状态设计
对于每个节点,定义三种状态:
-
节点未被任何路径覆盖。
-
节点是一条路径的端点,且该路径可以延伸到父节点。
-
节点是一条路径的一部分(中间点或端点),且该路径在子树中已完成(不会延伸到父节点)。
初始化
每个节点初始状态为未被覆盖。
状态转移
对于每个节点的子节点,考虑不连接或连接路径:
-
不连接:子节点的状态独立,直接合并到当前节点的状态。
-
连接:若子节点有开放路径,则与当前节点的状态 1 或 2 连接,形成新路径。
在合并所有子节点后,考虑当前节点自身形成新路径或转换状态。
答案就是根节点的所有状态中,路径数不超过 \(K\) 的最大权值和。
时间复杂度为 \(O(NK^2)\),由于 \(N \le 2 \times 10^5\),\(K \le 5\),可以通过此题。