Dijkstra AcWing 850. Dijkstra求最短路 II

原题链接

AcWing 850. Dijkstra求最短路 II

算法标签

最短路 Dijkstra

思路


图片摘自该题解

图片摘自该题解

代码

#include<bits/stdc++.h>
#define x first
#define y second
using namespace std;
typedef pair<int, int>PII;
const int N = 150005;
int n,m;
int dist[N];
// 稀疏图用邻接表来存
int h[N], w[N], e[N], ne[N], idx;
bool st[N];
void add(int a,int b,int c){// 有重边也不要紧,假设1->2有权重为2和3的边,再遍历到点1的时候2号点的距离会更新两次放入堆中// 这样堆中会有很多冗余的点,但是在弹出的时候还是会弹出最小值2+x(x为之前确定的最短路径),// 并标记st为true,所以下一次弹出3+x会continue不会向下执行。e[idx]=b;w[idx]=c;ne[idx]=h[a];h[a]=idx++;
}
int dij(){memset(dist, 0x3f , sizeof dist);dist[1] = 0;// 这里heap中为什么要存pair呢,首先小根堆是根据距离来排的,所以有一个变量要是距离,// 其次在从堆中拿出来的时候要知道知道这个点是哪个点,不然怎么更新邻接点呢?所以第二个变量要存点。priority_queue<PII, vector<PII>, greater<PII>> heap;heap.push({0,1});while (heap.size()) {auto t = heap.top();heap.pop();int ver = t.y,dis = t.x;if(st[ver]){continue;}st[ver] = true;for(int i = h[ver]; ~i; i = ne[i]){// i只是个下标,e中在存的是i这个下标对应的点。int j = e[i];if (dist[j] > dist[ver] + w[i]){dist[j] = dist[ver] + w[i];heap.push({dist[j], j});}}}if (dist[n] == 0x3f3f3f3f){return -1;}return dist[n];
}
signed main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);cin>>n>>m;memset(h, -1, sizeof h);while(m--){int a,b,c;cin>>a>>b>>c;add(a,b,c);}cout<<dij()<<"\n";
}

原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈

Dijkstra AcWing 850. Dijkstra求最短路 II相关推荐

  1. AcWing 850. Dijkstra求最短路 II

    原题链接:AcWing 850. Dijkstra求最短路 II 给定一个 n 个点 m 条边的有向图,图中可能存在 重边 和 自环 ,所有边权均为 非负值 . 请你求出 1 号点到 n 号点的最短距 ...

  2. AcWing 850. Dijkstra求最短路 II【最短路】【堆优化版Dijkstra】

    AcWing 850. Dijkstra求最短路 II 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 850. Dijkstra求 ...

  3. 堆优化版dijkstra算法:AcWing 850. Dijkstra求最短路 II

    堆优化版dijkstra算法分析: 朴素版dijkstra的时间复杂度为O(n^2),主要瓶颈在于第1步的寻找全局最小值的过程. 可以用小根堆(C++STL priority_queue)对dist数 ...

  4. Floyd AcWing 854. Floyd求最短路

    Floyd AcWing 854. Floyd求最短路 原题链接 AcWing 854. Floyd求最短路 算法标签 最短路 Floyd 思路 代码 #include<bits/stdc++. ...

  5. Dijkstra求最短路 II

    给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1. 输入格式 第一行包含整数n和m. 接下来m行每行包 ...

  6. AcWing 851. spfa求最短路(解决负边权最短路)

    题目链接 https://www.acwing.com/problem/content/853/ 思路 就是SPFA求最短路的模板,其思路大概是我们要更新所有能被松弛的边,然后更新松弛的边的边,然后就 ...

  7. 【ACWing】850. Dijkstra求最短路 II

    题目地址: https://www.acwing.com/problem/content/description/852/ 给定一个nnn个点mmm条边的有向图,图中可能存在重边和自环,所有边权均为非 ...

  8. AcWing 850. Dijkstra求最短路 II(堆优化dijkstra)

    题目链接 : 点击查看 题目描述 : 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值. 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点, ...

  9. AcWing 850. Dijkstra求最短路 II(最短路)

    堆优化dijkstra: #include<bits/stdc++.h> using namespace std;const int N=200010; typedef pair<i ...

最新文章

  1. servlet必知细节(三)-- DefaultServlet
  2. 山石网科-Hillstone-IPsec V_P_N常见故障debug排错心得终结版
  3. 科普大V河森堡:用科学的方法回答哲学问题
  4. SCI至上只是结果,而不是原因
  5. 理解 JavaScript 作用域和作用域链
  6. JVM——虚拟机的简介【摘录】
  7. Leetcode-322. 零钱兑换个人答案与官方答案的一个对比(以及对测试用例的思考)
  8. FIR基本型仿真_03
  9. [vue] 你期待vue3.0有什么功能或者改进的地方?
  10. [转载]使用CPU时间戳进行高精度计时
  11. PHP敏感词过滤【整理实践版】
  12. python爬虫实例100例-Python 练习实例1
  13. Logstash实践: 分布式系统的日志监控
  14. 2019 必看 Android 高级面试题总结
  15. 【Linux学习】Vim 怎么设置显示行号以及永久性显示行号
  16. 【android开发】实现语音数据实时采集/播放
  17. HBase二级索引Solr
  18. 爬虫之汽车之家/抽屉新热榜/煎蛋网
  19. 详解浏览器事件捕获、冒泡
  20. oracle执行计划px,【Oracle】并行等待之PX Deq: Execution Msg

热门文章

  1. 计算机ps课如何把玫瑰花绿色,PhotoShop制作喷溅的玫瑰花朵效果的教程
  2. C# 计算两个日期间隔天数
  3. 如何才能成为信息顾问
  4. 数据挖掘与机器学习基本算法总结
  5. 【Autoware】三、ROSBAG生成waypoint
  6. 华康卫视 摄像头接入 流媒体总结
  7. 为什么你的简历没人看?7份案例分析(收藏)
  8. Adobe Animate的画笔工具和画笔库
  9. 2013年5月12日 12:18:39
  10. 《java-----我的第一款像样的小软件》---运用了jsoup,jmail,多线程,文件的io操作等等