单源最短路径(dijkstra)新模板
时间:2021-07-20
本文章向大家介绍单源最短路径(dijkstra)新模板,主要包括单源最短路径(dijkstra)新模板使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#include<cstdio> #include<algorithm> #include<cstring> #include<queue> using namespace std; const int maxn = 2e5+5; struct mint { int nxt, v, w; }e[maxn]; int head[100005], num = 0, s, n, m, dis[maxn]; bool vis[maxn]; inline void add(int u, int v, int w) { e[++num].nxt = head[u]; e[num].v = v; e[num].w = w; head[u] = num; } inline void dj() { memset(dis,0x3f,sizeof(dis)); dis[s] = 0; priority_queue<pair<int, int> >q; q.push(make_pair(0,s)); while(!q.empty()) { int u = q.top().second; q.pop(); if(vis[u]) continue; vis[u] = true; for(int i = head[u]; i;i = e[i].nxt) { int v = e[i].v; if(dis[v] <= dis[u] + e[i].w) continue; dis[v] = dis[u] + e[i].w; q.push(make_pair(dis[v],v)); } } } int main() { int a, b, c, k = 0; scanf("%d%d%d", &n, &m, &s); for(int i = 1;i <= m;++i) { scanf("%d%d%d", &a, &b, &c); add(a,b,c); if(k < a) k = a; if(k < b) k = b; } dj(); for(int i = 1;i <= k;++i) { printf("%d ", dis[i]); } return 0; }
与原板子的区别:没有用重载运算符或者greater将priority_queue从大根堆改成小根堆。
而是在最后一步写成push(makepair(-dis[v],v))。
这里因为在下一次查询中只会需要使用q.top().second即v,压入-dis[v]对结果没有影响
而且priotity_queue是大根堆,因此压入-dis[v],能达成小根堆的效果(把dis[v]较小的点放在队头)。
原文地址:https://www.cnblogs.com/mint-hexagram/p/15035354.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- org.springframework.beans.factory.NoSuchBeanDefinitionException:
- Vector 源码剖析
- java.util.concurrent.TimeoutException: 的解决!
- HTTP Status 503 - Server is shutting down or failed to initialize
- LinkedHashMap 源码剖析
- 基于SSM框架与Maven的CRUD案例
- Java 8的这个新特性,你用了吗?
- JSP+Servlet项目整合
- springboot 整合 Mybatis、JPA、Redis
- 数据库中设置列/字段自增(Oracle和Mysql)
- 数据库中日期的插入(Oracle和Mysql)
- 浅谈在进行jsp页面编程时,路径问题的解决(绝对路径与相对路径)
- 浅谈springMVC中,中文乱码的显示问题(持续更新)
- 数据库的优化方法,一般人我不告诉他(建议收藏)
- idea 远程调试