#CF2113E. 来自喀山的爱
来自喀山的爱
E. 来自喀山的爱
每测试点时间限制:4 秒
每测试点内存限制:1024 MB
马拉特是喀山本地人。喀山可以表示为一棵由 个顶点组成的无向树。
年轻时马拉特经常卷入街头斗殴,现在他和 个敌人一起住在喀山,敌人编号为 到 。
每天,城中所有人都会去上班。马拉特知道第 个敌人住在顶点 ,在顶点 工作。
他自己住在顶点 ,在顶点 工作。保证 。
所有敌人都沿最短路径去上班,并在时刻 离开家。
也就是说,如果将顶点 和 之间的最短路径表示为 (其中 ,),则在时刻 (),第 个敌人位于顶点 。
马拉特非常不希望与任何敌人在同一时刻处于同一顶点,因为这会造成尴尬局面,但他们在边上相遇是可以的。
马拉特也在时刻 离开家,在之后的每个时刻,他可以选择移动到相邻顶点或停留在当前顶点。
注意,马拉特只能在时刻 与第 个敌人相遇(其中 是敌人 从 到 的最短路径)。
换句话说,从敌人到达工作地点之后的那一刻起,马拉特就不会再与他相遇。
请帮助马拉特找到他能够到达工作地点且沿途不遇到任何敌人的最早时刻,如果不可能,输出 。
输入
每个测试点包含多个测试用例。第一行包含测试用例数 ()。
每个测试用例描述如下:
- 第一行包含四个整数 (,,,)——树的顶点数、敌人数量、马拉特的起点和终点。
- 接下来 行,每行两个整数 (,)——树的第 条边。
- 接下来 行,每行两个整数 (,,)——第 个敌人的路线。
保证所有测试用例的 之和不超过 。
输出
对每个测试用例,输出一个整数——马拉特能到达工作地点且不遇到任何敌人的最早时刻,如果不可能,输出 。
示例
输入:
5
4 1 1 4
1 2
2 3
3 4
4 1
5 1 1 5
1 2
2 3
3 4
4 5
5 1
9 2 1 9
1 2
2 3
3 4
3 5
5 6
6 7
6 8
8 9
9 1
7 1
9 2 7 2
1 4
2 5
3 6
4 5
5 6
4 7
5 8
6 9
2 8
3 7
3 2 1 3
1 2
2 3
2 1
3 1
输出:
4
6
10
5
-1
说明
- 第一个测试用例:可以沿最短路径从顶点 到顶点 。注意马拉特与唯一敌人在边上相遇,而不是顶点上。
- 第二个测试用例:最优策略是在起点等待一个时刻,然后沿从 到 的最短路径走。如果一开始不停留,马拉特会在顶点遇到敌人。
- 第三个测试用例:先从 走到 ,然后在一个时刻内不动,再沿从 到 的最短路径走。