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

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

题目描述

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

输入输出样例

样例输入 #1

3 3 1 3
1 3 3
1 2 1
2 3 1

样例输出 #1

2
1 2 3

样例输入 #2

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

样例输出 #2

2
1 2 6 4

说明/提示

数据范围

对于 100%100\% 的数据:

  • 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