Dijkstra AcWing 850. Dijkstra求最短路 II
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相关推荐
- AcWing 850. Dijkstra求最短路 II
原题链接:AcWing 850. Dijkstra求最短路 II 给定一个 n 个点 m 条边的有向图,图中可能存在 重边 和 自环 ,所有边权均为 非负值 . 请你求出 1 号点到 n 号点的最短距 ...
- AcWing 850. Dijkstra求最短路 II【最短路】【堆优化版Dijkstra】
AcWing 850. Dijkstra求最短路 II 一.题目链接 二.题目分析 (一)算法标签 (二)解题思路 三.AC代码 四.其它题解 一.题目链接 AcWing 850. Dijkstra求 ...
- 堆优化版dijkstra算法:AcWing 850. Dijkstra求最短路 II
堆优化版dijkstra算法分析: 朴素版dijkstra的时间复杂度为O(n^2),主要瓶颈在于第1步的寻找全局最小值的过程. 可以用小根堆(C++STL priority_queue)对dist数 ...
- Floyd AcWing 854. Floyd求最短路
Floyd AcWing 854. Floyd求最短路 原题链接 AcWing 854. Floyd求最短路 算法标签 最短路 Floyd 思路 代码 #include<bits/stdc++. ...
- Dijkstra求最短路 II
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1. 输入格式 第一行包含整数n和m. 接下来m行每行包 ...
- AcWing 851. spfa求最短路(解决负边权最短路)
题目链接 https://www.acwing.com/problem/content/853/ 思路 就是SPFA求最短路的模板,其思路大概是我们要更新所有能被松弛的边,然后更新松弛的边的边,然后就 ...
- 【ACWing】850. Dijkstra求最短路 II
题目地址: https://www.acwing.com/problem/content/description/852/ 给定一个nnn个点mmm条边的有向图,图中可能存在重边和自环,所有边权均为非 ...
- AcWing 850. Dijkstra求最短路 II(堆优化dijkstra)
题目链接 : 点击查看 题目描述 : 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为非负值. 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点, ...
- AcWing 850. Dijkstra求最短路 II(最短路)
堆优化dijkstra: #include<bits/stdc++.h> using namespace std;const int N=200010; typedef pair<i ...
最新文章
- servlet必知细节(三)-- DefaultServlet
- 山石网科-Hillstone-IPsec V_P_N常见故障debug排错心得终结版
- 科普大V河森堡:用科学的方法回答哲学问题
- SCI至上只是结果,而不是原因
- 理解 JavaScript 作用域和作用域链
- JVM——虚拟机的简介【摘录】
- Leetcode-322. 零钱兑换个人答案与官方答案的一个对比(以及对测试用例的思考)
- FIR基本型仿真_03
- [vue] 你期待vue3.0有什么功能或者改进的地方?
- [转载]使用CPU时间戳进行高精度计时
- PHP敏感词过滤【整理实践版】
- python爬虫实例100例-Python 练习实例1
- Logstash实践: 分布式系统的日志监控
- 2019 必看 Android 高级面试题总结
- 【Linux学习】Vim 怎么设置显示行号以及永久性显示行号
- 【android开发】实现语音数据实时采集/播放
- HBase二级索引Solr
- 爬虫之汽车之家/抽屉新热榜/煎蛋网
- 详解浏览器事件捕获、冒泡
- oracle执行计划px,【Oracle】并行等待之PX Deq: Execution Msg