给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。

请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible。

数据保证不存在负权回路。

输入格式

第一行包含整数n和m。

接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。

输出格式

输出一个整数,表示1号点到n号点的最短距离。

如果路径不存在,则输出”impossible”。

数据范围

1≤n,m≤1051≤n,m≤105,
图中涉及边长绝对值均不超过10000。

输入样例:

  1. 3 3
  2. 1 2 5
  3. 2 3 -3
  4. 1 3 4

输出样例:

  1. 2
  2. Bellman-ford算法的队列优化
  3. 代码:
  1. //邻接表存储
  2. //n=1e5,不能用邻接表
  3.  
  4. import java.util.ArrayDeque;
  5. import java.util.Arrays;
  6. import java.util.Scanner;
  7.  
  8. public class Main{
  9. static final int N=100005, INF=0x3f3f3f3f;
  10. static int h[]=new int[N];
  11. static int e[]=new int[N];
  12. static int ne[]=new int[N];
  13. static int w[]=new int[N];
  14. static int dis[]=new int[N];
  15. static boolean vis[]=new boolean[N];
  16. static int n,m,idx;
  17. static void add(int a,int b,int c){
  18. e[idx]=b;
  19. w[idx]=c;
  20. ne[idx]=h[a];
  21. h[a]=idx++;
  22. }
  23. static int spfa(){
  24. ArrayDeque<Integer> q = new ArrayDeque<Integer>();
  25. Arrays.fill(dis, INF);
  26. dis[1]=0;
  27. q.offer(1);
  28. vis[1]=true;//vis数组表示当前点是否在队列中
  29. while(!q.isEmpty()){
  30. int t=q.poll();
  31. vis[t]=false;//不在队列中,置为false
  32. for(int i=h[t];i!=-1;i=ne[i]){
  33. int j=e[i];
  34. if(dis[j]>dis[t]+w[i]){
  35. dis[j]=dis[t]+w[i];
  36. if(!vis[j]){
  37. vis[j]=true;
  38. q.offer(j);
  39. }
  40. }
  41. }
  42. }
  43. if(dis[n]==INF) return -1;
  44. else return dis[n];
  45. }
  46. public static void main(String[] args) {
  47. Scanner scan=new Scanner(System.in);
  48. n=scan.nextInt();
  49. m=scan.nextInt();
  50. Arrays.fill(h, -1);
  51. while(m-->0){
  52. int a=scan.nextInt();
  53. int b=scan.nextInt();
  54. int c=scan.nextInt();
  55. add(a,b,c);
  56. }
  57. int t=spfa();
  58. if(t==-1) System.out.println("impossible");
  59. else System.out.println(t);
  60. }
  61. }

851. spfa求最短路(spfa算法模板)的更多相关文章

  1. SPFA求最短路——Bellman-Ford算法的优化

    SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环.SPFA 最坏情况下复杂度和朴素 Bellman-Ford 相同,为 O(VE), ...

  2. ACM - 最短路 - AcWing 851 spfa求最短路

    AcWing 851 spfa求最短路 题解 以此题为例介绍一下图论中的最短路算法 \(Bellman\)-\(Ford\) 算法.算法的步骤和正确性证明参考文章最短路径(Bellman-Ford算法 ...

  3. 基于bellman-ford算法使用队列优化的spfa求最短路O(m),最坏O(n*m)

    acwing851-spfa求最短路 #include<iostream> #include<cstring> #include<algorithm> #inclu ...

  4. spfa求次短路

    思路:先算出每个点到1的最短路d1[i],记录下路径,然后枚举最短路上的边 删掉之后再求一遍最短路,那么这时的最短路就可能是答案. 但是这个做法是错误的,可以被卡掉. 比如根据下面的例题生成的一个数据 ...

  5. POJ 1815 - Friendship - [拆点最大流求最小点割集][暴力枚举求升序割点] - [Dinic算法模板 - 邻接矩阵型]

    妖怪题目,做到现在:2017/8/19 - 1:41…… 不过想想还是值得的,至少邻接矩阵型的Dinic算法模板get√ 题目链接:http://poj.org/problem?id=1815 Tim ...

  6. acwing 851. spfa求最短路 模板

    地址 https://www.acwing.com/problem/content/description/853/ 给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出 ...

  7. 851. spfa求最短路

    给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible. 数据保证不存在负权回路. 输入格式 ...

  8. AcWing 851. spfa求最短路 边权可能为负数。 链表 队列

    #include <cstring> #include <iostream> #include <algorithm> #include <queue> ...

  9. Holy Grail【spfa求最短路】

    题目链接:https://www.jisuanke.com/contest/3004?view=challenges 题目大意: 1.一个无向图,给出六个顶点,添六条边,但是添边是有限制的.每次添边的 ...

随机推荐

  1. JVM源码分析之临门一脚的OutOfMemoryError完全解读

    概述 OutOfMemoryError,说的是java.lang.OutOfMemoryError,是JDK里自带的异常,顾名思义,说的就是内存溢出,当我们的系统内存严重不足的时候就会抛出这个异常(P ...

  2. js 细节

    1.js中var a=s=1和var a=1,s=1的区别 function fl() { ; } function fl1() { , s = ; } 看出问题所在了吗? var q=w=1 中的s ...

  3. DOTNET Core MVC(二)路由初探

    搁置了几天,工作忙的一塌糊涂,今天终于抽空来继续看看MVC的知识.先来看看MVC的路由是如何处理的.以下为替代的路由: app.UseEndpoints(endpoints => { endpo ...

  4. (1) Q#学习笔记 - 第一章 QDK安装

    2020/2/22,开始学习Q#. 第1章 QDK的安装 第1节 简介 QDK是Microsoft Quantum 开发工具包,可以进行量子编程,主要包含: Q# 编程语言 在 Q# 中对复杂功能进行 ...

  5. 全面了解Python中的特殊语法:filter、map、reduce、lambda。

    这篇文章主要介绍了Python中的特殊语法:filter.map.reduce.lambda介绍,本文分别对这个特殊语法给出了代码实例,需要的朋友可以参考下filter(function, seque ...

  6. go 算法与数据结构

    数据结构 稀疏数组 package main import "fmt" /* 稀疏数组 案例:五子棋存盘与复盘 节省存储空间 */ type ValNode struct { ro ...

  7. 在 Nest.js 中使用 MongoDB 与 TypeORM

    在 Nest.js 中使用 MongoDB 与 TypeORM 首先要在 database 文件夹里建立DatabaseModule模块文件, // database/database.module. ...

  8. 有关css编写文字动态下划线

    <div class="main_text">哈哈这就是我的小视频</div> 上面为html代码 接下来进行css的编写 .main_text{ posi ...

  9. 【58】目标检测之YOLO 算法

    YOLO 算法(Putting it together: YOLO algorithm) 你们已经学到对象检测算法的大部分组件了,在这个笔记里,我们会把所有组件组装在一起构成YOLO对象检测算法.   ...

  10. k8s 在Centos上 安装

    k8s安装步骤: 1.所有机器上执行以下命令,准备安装环境:(注意是所有机器,主机master,从机node都要安装) 1.1.安装epel-release源(EPEL (Extra Packages ...