#BW65. 城市的最短路距离

城市的最短路距离

题目描述

著名算法学家罗老师正在参加一场全国巡回的学术舞会。舞会的第 nn 站向他发出了最终邀约。罗老师目前身处城市 11 的研究所,他需要规划一条前往城市 nn 的路线。

这片区域有 nn 个城市,编号从 11nn。城市之间的交通网络由 mm 条双向道路构成。这个网络并非完全连通:有些城市之间由高速公路直接相连,交通便捷;而有些城市之间则没有直达路线,需要绕行。值得注意的是,出于历史或地理原因,某些重要的城市对之间甚至可能存在多条长度不同的直接道路,这为路径规划增加了额外的考量维度。

现在,罗老师拿到了完整的道路数据,每条数据记录了其连接的两个城市编号 aa, bb 以及该条道路的精确长度 cc。时间紧迫,罗老师需要你帮助他计算:从城市 11 的研究所出发,到达城市 nn 的舞会现场,所可能行走的最短距离总和是多少? 请你设计程序,帮助罗老师找到这条最优路径,或者告诉他这是一个无法完成的任务。

输入格式

第一行包含两个整数 nn, mm (1n2000, 1m10000)(1 \le n \le 2000,\ 1 \le m \le 10000),分别表示城市的数量和道路的数量。

接下来的 mm 行,每行包含三个整数 aa, bb, cc (1a,bn, 0c10000)(1 \le a, b \le n,\ 0 \le c \le 10000),表示城市 aa 与城市 bb 之间存在一条长度为 cc双向道路。输入数据保证 aba \neq b注意:两个城市之间可能存在多条直接相连的道路,其长度可能相同也可能不同。

输出格式

输出一行一个整数,表示从城市 11 到城市 nn最短距离

如果从城市 11 出发无法到达城市 nn(即两个城市在不连通的组件中),则输出 -1

输入输出样例

5 5
1 2 20
2 3 30
3 4 20
4 5 20
1 5 100
90

样例1解释: 从城市1到城市n的最短路径是 1 -> 2 -> 3 -> 4 -> 5,路径总长度为 20+30+20+20 = 90。虽然存在从 1 直接到 5 长度为 100 的道路,但并非最短。

2 0
-1

样例2解释: 只有两个城市,且它们之间没有任何道路连接,因此从城市1无法到达城市2,输出 -1