1 条题解
-
0
题解
思路
警察在非叶节点进入一个还有罪犯的分支后,不会在抓住该侧罪犯前原路返回,否则罪犯可用无限大速度重新逃回。因此每次真正抓到罪犯的位置可视为某个叶节点。罪犯在警察离开叶子后重新选择分布,警察再选下一个叶子,这形成一个“罪犯取最大、警察取最小”的 DP。
做法
子任务 1:枚举叶子分布
设 表示警察位于叶子 、还剩 名罪犯时的最优对抗时间。枚举罪犯在其他叶子上的全部整数分配 ,对每个分配,警察会选择
$$\min_{c_v>0}\bigl(\operatorname{dist}(u,v)+F(v,k-c_v)\bigr),$$罪犯在所有分配中取最大。初始时各罪犯不能跨过警察所在的 ,所以对删去 后的每个连通分支分别枚举分配。
子任务 2:有向边分割与背包
将一条有向边 看作把树分成两侧。设 表示警察正进入 侧,该侧有 名罪犯、另一侧有 名罪犯时的对抗值。若 是叶子,当 时结束;否则捕获当前侧后沿反向边继续。
若 不是叶子,罪犯把 人分到 的子分支,警察选择最有利的分支进入。用背包依次合并各子分支,在合并中交替使用 和 。
子任务 3:叶子 DP 与答案二分
对每个叶子 和剩余人数 ,二分 。对候选时间 ,对每个其他叶子 计算最多放多少人,仍能使
这些上限之和至少为 当且仅当罪犯能把结果拖到 。按 从小到大计算,所依赖的 都已得到。初始状态对删去 后的各分支使用同样的容量检查。
复杂度
第一层为叶子整数分配的指数级枚举;第二层为有向边、人数与背包合并 DP;满分层复杂度为 ,空间 ,其中 是叶子数, 是答案上界。
正确性证明
叶子状态已包含警察上一段路径造成的分隔信息;警察到达叶子后,未捕获罪犯可在警察之外的整棵树上重新分布,故状态只需记录叶子和剩余人数。对每个分布,警察选最小后续值;罪犯选使该最小值最大的分布。二分检查中的各叶子容量之和恰好判定是否存在这样的分布,因此逐层得到正确的 。初始分支限制保证罪犯不能穿过警察起点,故最终答案为完整对抗的最优值。
- 1
信息
- ID
- 1499
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者