D. 一次逆行

    传统题 1000ms 256MiB

一次逆行

该比赛已结束,您无法在比赛模式下递交该题目。您可以点击“在题库中打开”以普通模式查看和递交本题。

一次逆行

题目描述

给定一张有 nn 个点、mm 条边的有向图,点的编号为 11 到 nn。

你需要从点 ss 出发,到达点 tt。

正常情况下,你只能沿着有向边的方向移动。也就是说,如果存在一条边 u→vu \to v,那么你可以从 uu 走到 vv。

但是在整个过程中,你可以最多一次逆向经过某条边。

也就是说,如果存在一条边 u→vu \to v,你可以选择一次从 vv 走到 uu。

你也可以不使用这次逆行机会。

每经过一条边,无论是正向还是逆向,代价都为 11。

请你求出从 ss 到 tt 的最小代价。

特别地,如果 s=ts=t,答案为 00。

如果无法到达,输出 -1。

输入格式

第一行输入四个整数 n,m,s,tn,m,s,t,分别表示点数、边数、起点和终点。

接下来 mm 行,每行输入两个整数 u,vu,v,表示存在一条从 uu 到 vv 的有向边。

数据范围:

对于所有测试数据,满足:

2≤n≤2×1052 \le n \le 2 \times 10^5 0≤m≤2×1050 \le m \le 2 \times 10^5 1≤s,t≤n1 \le s,t \le n 1≤u,v≤n, u≠v1 \le u,v \le n,\ u \ne v

保证不存在重复的有向边。

注意,可能同时存在 u→vu \to v 和 v→uv \to u。

输出格式

输出一个整数,表示从 ss 到 tt 的最小代价。

如果无法到达,输出 -1。

输入输出样例 #1

输入 #1

5 4 1 5
1 2
3 2
3 4
4 5

输出 #1

4

输入输出样例 #2

输入 #2

4 3 1 4
2 1
3 2
3 4

输出 #2

-1

说明/提示

存在边 3→23 \to 2。

正常情况下不能从 22 走到 33,但可以使用一次逆行,从 22 逆向经过这条边到达 33。

因此可以走:

1 -> 2 -> 3 -> 4 -> 5

总代价为 44。

【睿爸信奥】入门组算法周赛(20260613)

未参加
状态
已结束
规则
IOI
题目
4
开始于
2026-6-13 0:00
结束于
2026-6-20 0:00
持续时间
4 小时
主持人
参赛人数
19