acwing 850. Dijkstra求最短路 II 模板
地址 https://www.acwing.com/problem/content/description/852/
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值。 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-。 输入格式
第一行包含整数n和m。 接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。 输出格式
输出一个整数,表示1号点到n号点的最短距离。 如果路径不存在,则输出-。 数据范围
≤n,m≤,
图中涉及边长均不小于0,且不超过10000
输入样例: 输出样例:
这里相比上一篇 Dijkstra模板 使用了堆记录点距离 从而节省了查找最短距离的开销
#include <iostream>
#include <vector>
#include <queue>
#include <memory.h> using namespace std;
typedef pair<int, int> PII; const int N = ;
vector<vector<pair<int, int>>> gra;
int dist[N];
int st[N];
int n, m; int solve()
{
memset(dist, 0x3f, sizeof dist);
dist[] = ;
//这里是距离在前 节点号在后
priority_queue<PII, vector<PII>, greater<PII>> heap;
heap.push({ , }); // first存储距离,second存储节点编号 while (heap.size()) {
auto t = heap.top();
heap.pop(); int node = t.second; int distance = t.first; if (st[node]) continue;
st[node] = true;
//查看每个出边
for (int i = ; i < gra[node].size(); i++) {
int newnode = gra[node][i].first;
int len = gra[node][i].second;
if (dist[newnode] > dist[node] + len) {
dist[newnode] = dist[node] + len;
heap.push({ dist[newnode],newnode });
}
} } if (dist[n] == 0x3f3f3f3f) return -;
return dist[n];
} int main()
{
//cin >> n >> m;
scanf("%d %d",&n,&m);
gra.resize(n + ); for (int i = ; i < m; i++) {
int a, b, c;
//cin >> a >> b >> c;
scanf("%d %d %d",&a,&b,&c);
//这里是 目的节点号在前 边长在后
gra[a].push_back({ b,c });
} printf("%d\n", solve() ); return ;
}
acwing 850. Dijkstra求最短路 II 模板的更多相关文章
- AcWing 850. Dijkstra求最短路 II 堆优化版 优先队列 稀疏图
//稀疏图 点和边差不多 #include <cstring> #include <iostream> #include <algorithm> #include ...
- 850. Dijkstra求最短路 II(堆优化模板)
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1. 输入格式 第一行包含整数n和m. 接下来m行每行 ...
- 850. Dijkstra求最短路 II
给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出-1. 输入格式 第一行包含整数n和m. 接下来m行每行包 ...
- acwing 849 Dijkstra求最短路 I 模板
地址 https://www.acwing.com/problem/content/description/851/ 给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出 ...
- ACM - 最短路 - AcWing 849 Dijkstra求最短路 I
AcWing 849 Dijkstra求最短路 I 题解 以此题为例介绍一下图论中的最短路算法.先让我们考虑以下问题: 给定一个 \(n\) 个点 \(m\) 条边的有向图(无向图),图中可能存在重边 ...
- AcWing 849. Dijkstra求最短路 I 朴素 邻接矩阵 稠密图
//朴素Dijkstra 边权都是正数 稠密图:点和边差的比较多 #include<cstring> #include<iostream> #include<algori ...
- 关于dijkstra求最短路(模板)
嗯.... dijkstra是求最短路的一种算法(废话,思维含量较低, 并且时间复杂度较为稳定,为O(n^2), 但是注意:!!!! 不能处理边权为负的情况(但SPFA可以 ...
- ACM - 最短路 - AcWing 851 spfa求最短路
AcWing 851 spfa求最短路 题解 以此题为例介绍一下图论中的最短路算法 \(Bellman\)-\(Ford\) 算法.算法的步骤和正确性证明参考文章最短路径(Bellman-Ford算法 ...
- Aizu-2249 Road Construction(dijkstra求最短路)
Aizu - 2249 题意:国王本来有一个铺路计划,后来发现太贵了,决定删除计划中的某些边,但是有2个原则,1:所有的城市必须能达到. 2:城市与首都(1号城市)之间的最小距离不能变大. 并且在这2 ...
随机推荐
- JavaEE基础(04):会话跟踪技术,Session和Cookie详解
本文源码:GitHub·点这里 || GitEE·点这里 一.会话跟踪 1.场景描述 比如登录某个购物网站,身份识别成功后,在网站下单,支付 等操作,这些操作中当前登录用户信息必须是共享的,这样这些操 ...
- 基于FPGA的LCD+CMOS视频采集显示使用小结
基于FPGA的LCD+CMOS视频采集显示 液晶显示器采用扫描模式,RGB888 电源采用:+5V供电 usb供电有时候会出现供电不足的问题 显示器接口有两种选择:16bit或24bit 分别对应 ...
- windows安装apache+mysql+php
文件打包下载,包括apache.mysql.php,地址如下: 链接: https://pan.baidu.com/s/1Mcm4OxJV45UWsktBycw7mQ 密码: dwy6 安装apach ...
- 【NPM】361- 10个 NPM 使用技巧
点击上方"前端自习课"关注,学习起来~ 对于一个项目,常用的一些npm简单命令包含的功能有: 初始化一个文件夹( npm init ) 下载npm模块( npm install ) ...
- 【CSS】352- 有趣的CSS弹跳动画
点击上方"前端自习课"关注,学习起来~ 这是只用了一个div来做的小动画,纯粹利用CSS3的animation来完成,就像是一个正方形在地上弹跳,碰到地面的时候尖角还会压缩变圆,阴 ...
- docker-compose编排参数详解
一.前言 Compose是一个用于定义和运行多容器Docker应用程序的工具.使用Compose,您可以使用YAML文件来配置应用程序的服务.然后,使用单个命令,您可以从配置中创建并启动所有服务. C ...
- GoLand相同目录(包)下方法调用
之前写的python,摸索go的时候发现相同目录下写的方法调用,在编译时竟然会报错,Mark~ 相同目录下方法调用,main.go文件调用tool.go中的add方法,要点如下: 1.两个文件的pak ...
- 6. abp中的拦截器
abp拦截器基本定义 拦截器接口定义: public interface IAbpInterceptor { void Intercept(IAbpMethodInvocation invocatio ...
- 微信小程序APP生命周期
小程序APP生命周期需要先从app.js这个文件开始,App() 必须在 app.js 中调用,必须调用且只能调用一次,app.js中定义了一些应用的生命周期函数 onLaunch----当小程序初始 ...
- openshift安装部署
前置准备工作: 1.每台主机准备好有公钥在 /root/.ssh/authorized_keys,私钥则存放在第一台主机的/root/.ssh/id_rsa 2.确定每台主机的私网IP地址是固定的. ...