
最短路径(Shortest Path)
问题描述
给你一个含 N 个顶点、M 条边的简单有向带权图。第 i 条边从顶点 ai 指向顶点 bi,权重为 ci。
请找出从顶点 s 到顶点 t 的一条最短路径(按边权和最小);若不存在路径,输出 -1。
若有多个最短路径,输出任意一条即可。
约束条件
- 2≤N≤5×105
- 1≤M≤5×105
- 0≤s,t<N
- s=t
- 0≤ai,bi<N
- ai=bi
- (ai,bi)=(aj,bj) 当 i=j
- 0≤ci≤109
输入格式
N M s t
a0 b0 c0
a1 b1 c1
:
aM−1 bM−1 cM−1
输出格式
- 若无路径:
-1
- 否则:
X Y
u0 u1 … uY−1
其中:
- X 是最短路径的总权重;
- Y 是路径上的边数;
- ui 是第 i 条边的起点顶点(即路径顶点序列为 u0,u1,…,uY,其中 uY=t)。
5 7 2 3
0 3 5
0 4 3
2 4 2
4 3 10
4 0 7
2 1 5
1 0 1
11 3
2 1
1 0
0 3
2 1 0 1
1 0 10
-1