Luogu P4779 【模板】单源最短路径(标准版)(Dijkstra+堆优化模板)
dij其实和prim挺像的,prim是找权值最小点,dij是找边,
用一个优先队列就可以在加入边的时候直接排序,避免了每次遍历更新min
priority_queue <pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
这句话就能把大根堆转化为小根堆(pair中的第一个值first最小的在最上面),
同时pair<边权,序号>便于在对边权排序的同时调用这条边的序号。
注意事项:
- 找点的时候要有一个vis标记是否访问过(剪枝)
- 加边的时候要注意是有向图还是无向图...
代码如下
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std; const int maxn = ;
const int INF = ;
int n,m,s,x,y,z,cnt;
int to[maxn],next[maxn],head[maxn],val[maxn],dis[maxn];
bool vis[maxn]; void add(int x,int y,int z) {
to[++cnt] = y;
next[cnt] = head[x];
head[x] = cnt;
val[cnt] = z;
} void dijkstra(int s) {
priority_queue <pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > > q;
dis[s] = ;
q.push(make_pair(,s));
while(!q.empty()) {
int u = q.top().second;
q.pop();
if(vis[u])continue;
vis[u] = ;
for(int i = head[u]; i; i = next[i]) {
int v = to[i];
if(dis[v] <= dis[u] + val[i]) continue;
dis[v] = dis[u] + val[i];
q.push(make_pair(dis[v],v));
}
}
return;
} int main() {
scanf("%d%d%d",&n,&m,&s);
for(int i = ; i <= m; i++) {
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
}
for(int i = ; i <= n; i++)
dis[i] = INF;
dijkstra(s);
for(int i = ; i <= n; i++)
cout << dis[i] << ' ';
return ;
}
Luogu P4779 【模板】单源最短路径(标准版)(Dijkstra+堆优化模板)的更多相关文章
- 单源最短路——朴素Dijkstra&堆优化版
朴素Dijkstra 是一种基于贪心的算法. 稠密图使用二维数组存储点和边,稀疏图使用邻接表存储点和边. 算法步骤: 1.将图上的初始点看作一个集合S,其它点看作另一个集合 2.根据初始点,求出其它点 ...
- 单源最短路径问题2 (Dijkstra算法)
用邻接矩阵 /* 单源最短路径问题2 (Dijkstra算法) 样例: 5 7 0 1 3 0 3 7 1 2 4 1 3 2 2 3 5 2 4 6 3 4 4 输出: [0, 3, 7, 5, 9 ...
- hdu 2544 单源最短路问题 dijkstra+堆优化模板
最短路 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 单源最短路径问题之dijkstra算法
欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. 算法的原理 以源点开始,以源点相连的顶点作为向外延伸的顶点,在所有这些向外延伸的顶 ...
- 图论(四)------非负权有向图的单源最短路径问题,Dijkstra算法
Dijkstra算法解决了有向图G=(V,E)上带权的单源最短路径问题,但要求所有边的权值非负. Dijkstra算法是贪婪算法的一个很好的例子.设置一顶点集合S,从源点s到集合中的顶点的最终最短路径 ...
- 单源最短路径 Bellman_ford 和 dijkstra
首先两个算法都是常用于 求单源最短路径 关键部分就在于松弛操作 实际上就是dp的感觉 if (dist[e.to] > dist[v] + e.cost) { dist[e.to] = dist ...
- 非负权值有向图上的单源最短路径算法之Dijkstra算法
问题的提法是:给定一个没有负权值的有向图和其中一个点src作为源点(source),求从点src到其余个点的最短路径及路径长度.求解该问题的算法一般为Dijkstra算法. 假设图顶点个数为n,则针对 ...
- [模板]单源最短路径(Dijkstra)
如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 主要还是再打一遍最短路,这种算法我用的不多... #include<bits/stdc++.h> using namesp ...
- 【洛谷 p3371】模板-单源最短路径(图论)
题目:给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 解法:spfa算法. 1 #include<cstdio> 2 #include<cstdlib> 3 #in ...
随机推荐
- 关于vue,webpack 中 “exports is not defined”报错
vue项目npm run dev 后项目报错 : 提示 “exports is not defined”. 导致这个问题是因为balbel的配置文件.babelrc的问题: { "prese ...
- Python 字符编码简记
名称 说明 ASCII 只能存英文和拉丁字符,一个字符占一个字节,8位. ASCII 码是不支持中文的,支持中文的第一张表是 GB2312 GB2312 支持中文,收录了 7445个字符 GBK1.0 ...
- Spring Boot MyBatis配置多种数据库
mybatis-config.xml是支持配置多种数据库的,本文将介绍在Spring Boot中使用配置类来配置. 1. 配置application.yml # mybatis配置 mybatis: ...
- CSS水平居中的三种方法
CSS中经常会用到元素居中,那么今天我为大家分享几种水平居中的方法,下面代码都可以达到同样的居中效果,来不及解释了,快上马(码): 一.margin : 0 auto; <head> &l ...
- [VUE ERROR] Duplicate keys detected: 'tab-user'. This may cause an update error.
错误消息如图: 如果你看到此错误消息,则说明 v-for 指令的 key值 重复了,只需修改你的 key值 让其不会重复即可.
- Openlayer3之瓦片数据接入
瓦片数据集接入实现思路: 1.构造ol.source.TileImage数据源,构造该数据源需要以下几项: 1)空间参考,通过如下代码构造 2)TileGrid,构造需要以下几项: a)原点 b)分辨 ...
- system.img镜像转换为system.new.dat + system.transfer.list
android 8.1上面验证,支持所有的android版本,直接放到sdk中执行即可. img2sdat.py #!/usr/bin/env python #coding=utf-8 imp ...
- selenium获取cookie
参考地址:https://www.cnblogs.com/lingwang3/p/7750156.html # 获取cookie import time from selenium import we ...
- python第六十八天--第十二周作业
主题: 需求: 用户角色,讲师\学员, 用户登陆后根据角色不同,能做的事情不同,分别如下讲师视图 管理班级,可创建班级,根据学员qq号把学员加入班级 可创建指定班级的上课纪录,注意一节上课纪录对应多条 ...
- FastReport脚本把数据绑定到文本控件上
public class ReportScript { private void Data25_BeforePrint(object sender, EventArgs e)//Data25是指需要绑 ...