#NC2503H. Head out to the Target
Head out to the Target
题目描述
给定一个包含 个节点的有根树,根节点是节点1。对于每个节点 ,其父节点为 。一个物体最初位于节点 。
在这个问题中,时间被划分为若干个不重叠的区间。在每个区间 内,节点 上会出现一个目标。你可以在任何时刻(包括时刻 )切断树中的任意数量的边,每条边只能被切断一次。
在任何时刻:
- 如果目标存在(当前时间处于某个 内),并且
- 物体和目标在同一个连通块内,并且
- 物体当前不在目标节点上
那么物体将沿着通往目标的唯一简单路径移动一步。如果物体到达目标节点(或在时刻开始时已经在目标节点上),则视为一次成功相遇。
你的目标是通过切断边的策略,确定物体可以与某个目标成功相遇的最早时刻。如果无法与任何目标相遇,则输出 -1。
输入格式
输入的第一行包含两个整数 和 (, ) —— 树的大小和目标区间的数量。
第二行包含 个整数 () —— 节点 的父节点。
接下来 行,每行包含三个整数 (, ) —— 表示在时刻 区间内,目标出现在节点 。
保证所有时间区间按顺序给出且不重叠。即对于每个 ,都有 。
输出格式
输出一个整数,表示物体可以与目标相遇的最小时刻。如果不可能,输出 -1。
8 3
1 1 1 4 4 6 7
5 1 1
8 2 3
4 5 5
5
5 5
1 2 3 3
4 4 6
5 7 7
1 8 8
2 9 9
1 10 10
6
5 1
1 2 3 4
3 1 1
-1
解释 #1
在第一个测试用例中,可能的最佳策略之一描述如下:
- 时刻 :物体从节点 移动到节点 。
- 移动完成后,我们切断节点 和节点 之间的边。
- 时刻 和 :节点 (物体当前所在的节点)和节点 (目标节点)不连通,因此物体不移动。
- 时刻 :树上没有目标,因此物体也不移动。
- 时刻 :目标恰好出现在物体所在的节点 ,导致重合。
可以很容易证明,没有策略允许在时刻 之前发生重合。因此,答案是 。