
AcWing 850. Dijkstra求最短路 II(堆优化版最短路)
发布日期:2021-05-07 14:08:41
浏览次数:13
分类:原创文章
本文共 1974 字,大约阅读时间需要 6 分钟。
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值。
请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1。
输入格式
第一行包含整数n和m。
接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。
输出格式
输出一个整数,表示1号点到n号点的最短距离。
如果路径不存在,则输出-1。
数据范围
1≤n,m≤1.5×1051≤n,m≤1.5×105,
图中涉及边长均不小于0,且不超过10000。
输入样例:
3 31 2 22 3 11 3 4
输出样例:
3
import java.io.*;import java.lang.*;import java.util.*;class Main{ static int n = 0, m = 0, N = 1000010; static PriorityQueue<int[]> q = new PriorityQueue<>((a,b)->{return a[1] - b[1];}); static int[] dist = new int[N]; static boolean[] f = new boolean[N]; static int[] h = new int[N], ne = new int[N], e = new int[N], w = new int[N]; static int idx = 1; static int Dijkstra(){//类似广搜的过程 Arrays.fill(dist, 0x3f3f3f3f); dist[1] = 0;//初始化第一个点到自身的距离 q.offer(new int[]{1, 0}); while(q.size() != 0){ int[] a = q.poll(); int t = a[0], distance = a[1]; if(f[t])continue; f[t] = true; for(int i = h[t]; i != -1; i = ne[i]){ int j = e[i]; if(dist[j] > distance + w[i]){ dist[j] = distance + w[i]; q.offer(new int[]{j, dist[j]}); } } } if(dist[n] != 0x3f3f3f3f)return dist[n]; return -1; } static void add(int a, int b, int c){ e[idx] = b; w[idx] = c;ne[idx] = h[a]; h[a] = idx++; } public static void main(String[] args)throws Exception{ BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); String[] params = buf.readLine().split(" "); n = Integer.valueOf(params[0]); m = Integer.valueOf(params[1]); Arrays.fill(h, -1); for(int i = 1; i <= m; ++i){ String[] info = buf.readLine().split(" "); int a = Integer.valueOf(info[0]); int b = Integer.valueOf(info[1]); int c = Integer.valueOf(info[2]); add(a, b, c); } System.out.print(Dijkstra()); }}
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月05日 19时08分57秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
vue-router 缓存路由组件对象
2019-03-04
js中事件捕获和事件冒泡(事件流)
2019-03-04
js的各种数据类型判断(in、hasOwnProperty)
2019-03-04
严格模式、混杂模式与怪异模式
2019-03-04
一篇文章带你搞定 Java 中字符流的基本操作(Write / Read)
2019-03-04
HTML 和 CSS 简单实现注册页面
2019-03-04
(Java)让枚举实现一个接口
2019-03-04
XML 解析学习
2019-03-04
验证码的简单实现
2019-03-04
JSP 入门学习
2019-03-04
JSP,EL 和 JSTL 一篇文章就够了
2019-03-04
(延迟初始化)Lazy 初始化
2019-03-04
(SpringMVC)springMVC.xml 和 web.xml
2019-03-04
Oracle 学习一篇文章就够了(珍藏版)
2019-03-04
一篇文章带你搞定 Oracle 的体系结构
2019-03-04
Oracle 单行函数
2019-03-04
(Java 剑指 offer)剪绳子
2019-03-04
一篇文章带你搞定 OAuth 2.0 的四种方式
2019-03-04
一篇文章带你搞定 Spring Security 的登录流程
2019-03-04