850. Dijkstra求最短路 II
给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值。
请你求出 1号点到 n 号点的最短距离,如果无法从 1 号点走到 n号点,则输出 −1。
输入格式
第一行包含整数 n 和 m。
接下来 m 行每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y的有向边,边长为 z。
输出格式
输出一个整数,表示 1 号点到 n 号点的最短距离。
如果路径不存在,则输出 −1。
数据范围
1≤n,m≤1.5×10^5,
图中涉及边长均不小于 00,且不超过 10000。
数据保证:如果最短路存在,则最短路的长度不超过 10^9。
输入样例:
3 3
1 2 2
2 3 1
1 3 4
输出样例:
3
堆优化版其实就是存储结构不同,这里因为是稀疏图,用邻接表的方式存储,相对于普通的邻接表母版,存储时多一个边长的权值就可以。 这里会用到优先队列,来实现小根堆,保证堆顶是最小元素(也就模拟了距当前位置最近的一个点j,用该点去更新其他点的距离,更新时判断一下).
其实更新的方式和朴素版并无多大区别,详见主页朴素版解法
看看代码,有注释详解。
首先时邻接表存储的实现;
对于稀疏图用邻接表ÿ