#P16044. [Oji2023]Veri两个表亲
[Oji2023]Veri两个表亲
题目描述
给定一个有向图,包含 个点和 条边。每条边的代价均为 ,也就是说,沿一条边走需要 分钟。
两个“表兄弟”从同一个起点 出发。其中一个人想要到达点 ,另一个人想要到达点 。
他们一开始必须一起走,直到他们第一次形成循环:也就是在共同走过的路径中,第一次到达某个已经到达过的点。设这个第一次被第二次到达的点为 。
在形成循环之后,两个人可以分开继续走;如果他们愿意,也可以继续走相同的路。也就是说,从点 开始,不再强制要求两人同行。
每个人都必须在形成循环之后才结束自己的路程。不过,如果形成循环的位置恰好就是 或 ,那么对应的人可以不再继续走,也就是后续路径长度可以为 。
如果两人第一次形成循环恰好发生在 分钟后,随后第一个人从 到 还需要 分钟,第二个人从 到 还需要 分钟,那么这个方案的用时为:
请你求这个值的最小可能值;在第二类任务中,还需要构造达到最小值的三段路径。
任务类型
输入第一行给出一个整数 ,表示任务类型:
- 若 ,只需要输出最小的 ;
- 若 ,需要输出三段路径:
- 两人共同从 走到 的路径;
- 形成循环后,第一个人从 到 的路径;
- 形成循环后,第二个人从 到 的路径。
这三段路径对应的值 必须最小。
输入格式
第一行包含一个整数 。
第二行包含两个整数 。
第三行包含三个整数 。
接下来 行,每行包含两个整数 ,表示存在一条从 指向 的有向边。
输出格式
若 ,输出一个整数,表示最小的 。
若 ,输出三条路径。每条路径占两行:
- 第一行输出路径长度,即路径中的边数;
- 第二行输出路径经过的所有点,点之间用空格分隔。
第一条路径应当是从 到 的共同路径,并且它的最后一个点 必须是这条共同路径中第一次重复出现的点。第二条路径应当从 到 。第三条路径应当从 到 。
数据范围
- ;
- 点编号为 到 ;
- ;
- ;
- 保证每个测试数据至少存在一个解;
- 不存在自环;
- 任意两个不同点之间最多存在一条有向边;
- 如果两人在 分开,第一个人可以不再移动,此时第二段路径长度为 ,路径只包含点 ;对 同理;
- 对每个子任务, 的测试点占该子任务分数的 。
子任务
| 子任务 | 分值 | 限制 |
|---|---|---|
| 1 | 30 | ,,且所有边均为 |
| 2 | 50 | |
| 3 | 20 | 且 |
样例 1
输入
2
7 8
1 3 4
1 2
2 5
5 7
7 6
6 7
6 5
5 3
7 4
输出
5
1 2 5 7 6 5
1
5 3
2
5 7 4
样例 2
输入
2
7 8
1 2 5
1 3
1 4
3 2
4 5
6 4
7 3
3 6
4 7
输出
5
1 4 7 3 6 4
3
4 7 3 2
1
4 5
样例 3
输入
2
5 6
1 3 5
1 2
2 3
3 4
4 3
3 1
3 5
输出
4
1 2 3 4 3
0
3
1
3 5
样例 4
输入
1
4 4
1 2 4
1 3
3 2
2 3
2 4
输出
5
样例图示

样例1图解