1 条题解
-
0
题解:Dreaming Is Not Harmful
题目分析
核心规则
- 公司结构是以 为根的树,员工 的直属上级是 ,能力值 互不相同,值越大能力越强。
- 每日淘汰规则:根节点(CEO)被开除,能力最强的直接子节点继任为新根,原根的其他子节点成为新根的直接子节点。
- 每个员工 能算出不取消任何人时自己成为 CEO 的天数 。
- 询问:对 ,恰好取消一个员工(将其 置 ),求 成为 CEO 的最小天数。
- 所有询问独立,不修改原始数据。
关键观察
- 继任顺序完全由能力值排序决定:每天淘汰当前根,下一个根是当前根的最大 子节点。
- 设全局能力降序排列为 (),则:
- 第 天 CEO:
- 第 天 CEO:
- 第 天 CEO: 因此原始天数 ( 是 在全局降序中的排名)。
- 取消一个员工 ,等价于删除 ,新的继任序列是原序列去掉 ,新天数 。
- 目标:对 ,选一个 删除,使得 最小,即 最小。
核心转化
设 为 在原始能力降序中的排名,则:
- 不删除时:
- 删除 时:
- 若 在 之前():,
- 若 在 之后():,
- 若 :无效(取消自己无法成为 CEO)
终极结论
对询问 :
- 若 (根节点):答案为 。
- 否则:
- 若存在至少一个节点 ,满足 ,且 在 的「继任依赖链」上:答案为 。
- 否则:答案为 。
树的继任依赖链(关键定义)
一个节点 能阻碍 快速继任,当且仅当 是 到根的路径上,在原始继任过程中,会比 先成为根的节点。
简化:对每个节点 ,定义前驱集合 :所有满足 ,且 是 的祖先(含父节点、根)的节点。
- 若 :删除 中任意一个 , 的排名提前 ,答案 。
- 若 :无法提前,答案 。
算法步骤
步骤1:预处理排名
- 读取树结构、能力值 。
- 对所有节点按 降序排序,得到排名数组 ( 为 的排名)。
步骤2:预处理祖先的最小排名
对每个节点 ,维护从根到 的路径上,最小的 rank 值(记为 ):
$$\text{min\_anc\_rank}[v] = \min(\text{rank}[v], \text{min\_anc\_rank}[p_v]) $$步骤3:回答询问
对每个询问 :
- 若 :输出 。
- 否则:
- 若 :说明存在祖先 满足 ,答案 。
- 否则:答案 。
复杂度分析
- 排序:
- 遍历树预处理 :
- 回答询问:
总复杂度:,完全满足 的约束。
总结
- 核心:继任顺序 = 能力值降序,天数 = 排名 1。
- 取消一个节点的最优选择:删除排名比 靠前的祖先,让 排名提前 。
- 算法线性遍历 + 排序,高效处理大数据量。
- 1
信息
- ID
- 6381
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者