#P971. 【基础】最短距离和路径问题

    ID: 2530 传统题 1000ms 32MiB 尝试: 0 已通过: 0 难度: 3 上传者: 标签>数据结构图结构最短路图论普及结构体顺序结构

【基础】最短距离和路径问题

题目描述

nn 个城市,编号为 1n1 \sim n,城市之间有 mm 条双向道路,每条道路有一个正整数长度。请你求出从起点 ss 到终点 tt 的最短距离,以及最短路径上经过的城市编号。

如果从 sstt 存在多条长度相同的最短路径,请输出字典序最小的那条路径;若不存在从 sstt 的路径,请输出 can't arrive

注意:两个相同的城市之间可能存在多条道路。

输入格式

第一行包含四个正整数 n,m,s,tn, m, s, t,分别表示城市的数量、道路的数量、起点编号、终点编号。

接下来 mm 行,每行三个正整数 x,y,lenx, y, len,表示一条连接城市 xx 和城市 yy 的双向道路,道路长度为 lenlen

输出格式

如果存在从起点 ss 到终点 tt 的路径:

  • 第一行输出一个整数,表示 sstt 的最短距离。
  • 第二行输出若干个用空格分隔的整数,表示最短路径上依次经过的城市编号。若有多条最短路径,输出字典序最小的那条。

如果不存在从起点 ss 到终点 tt 的路径,仅输出一行字符串 can't arrive

样例

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

样例解释

  • 样例 1:131 \to 3 直接距离为 33,但 1231 \to 2 \to 3 距离为 22,后者更短且字典序为 1 2 3
  • 样例 2:12641 \to 2 \to 6 \to 4 距离为 22,字典序比另一条路径 15341 \to 5 \to 3 \to 4 更小。

数据范围

  • 1n<10001 \leq n < 1000
  • 1m<100001 \leq m < 10000
  • 1s,tn1 \leq s, t \leq n
  • 1x,yn1 \leq x, y \leq n
  • 1len500001 \leq len \leq 50000