1 条题解
-
0
「POI2011 R3」视察 Inspection 题解
问题简述
有一棵 个节点的树,选定一个起点 ,要按以下规则访问所有其他节点:
每次从 出发,去一个没访问过的节点 ,视察 ,然后返回
相邻两次出发必须走不同的边离开
访问完最后一个节点后不用回
每条边用时 1 小时
对每个可能的 ,求最小总时间,或输出 -1 表示不可能。
核心思路
- 可行性判断 要能访问所有节点,必须满足:
从 出发的每条边都至少用一次
总访问次数 = 次(除 外的节点数)
这要求 的度数 ≥ 2,且每个子树不能太大。
关键定理:只有当 是树的重心时才可能。
- 最小时间计算 总时间 = 所有往返时间之和 - 最后节省的时间
具体公式:
text 总时间 = 2 × 所有节点到S的距离之和 - 距离S最远的节点的距离 3. 高效算法 换根 DP 计算每个节点作为 时的距离和
找重心 判断可行性
复杂度
算法步骤
第一遍 DFS:计算以 1 为根时每个节点的深度、子树大小
第二遍 DFS(换根):计算每个节点作为根时的距离和
判断每个节点:
如果是重心且满足条件:按公式计算时间
否则:输出 -1
为什么这样对? 距离和:总时间主要花在往返路上
减去最大距离:最后一次不用返回,省下最长的路
重心条件:保证能从不同边交替出发完成所有访问
这样就能在 时间内解决这个看起来复杂的问题。
- 1
信息
- ID
- 5923
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者