acwing 851. spfa求最短路 模板
地址 https://www.acwing.com/problem/content/description/853/
给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数。
请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible。
数据保证不存在负权回路。
输入格式
第一行包含整数n和m。
接下来m行每行包含三个整数x,y,z,表示存在一条从点x到点y的有向边,边长为z。
输出格式
输出一个整数,表示1号点到n号点的最短距离。
如果路径不存在,则输出”impossible”。
数据范围
1≤n,m≤1051≤n,m≤105,
图中涉及边长绝对值均不超过10000。
输入样例: - 输出样例:
解答
#include <iostream>
#include <vector>
#include <algorithm>
#include <memory.h>
#include <queue> using namespace std; /* acwing 851
3 3
1 2 5
2 3 -3
1 3 4
*/ const int MAX_N = ; vector<pair<int, int>> v[MAX_N];
int dist[MAX_N];
int st[MAX_N];
int n, m; int solve()
{
memset(dist, 0x3f, sizeof(dist));
dist[] = ; queue<int> q;
q.push();
st[] = ; while (!q.empty()) {
auto e = q.front();
q.pop(); st[e] = false; for (int i = ; i < v[e].size(); i++) {
int target = v[e][i].first;
int len = v[e][i].second;
if (dist[target] > dist[e] + len) {
dist[target] = dist[e] + len;
if (!st[target]) {
//队列中不存在target节点 插入队列
q.push(target);
st[target] = ;
}
}
}
} if (dist[n] == 0x3f3f3f3f) return -;
return dist[n];
} int main()
{
//cin >> n >> m;
scanf("%d%d",&n,&m);
//v.resize(n+1); for (int i = ; i < m; i++) {
int a, b, c;
//cin >> a >> b >> c;
scanf("%d%d%d",&a,&b,&c);
v[a].push_back({ b,c });
} int ret = solve(); if (ret == -) printf("impossible\n");
else printf("%d\n",dist[n]); return ;
}
acwing 851. spfa求最短路 模板的更多相关文章
- ACM - 最短路 - AcWing 851 spfa求最短路
AcWing 851 spfa求最短路 题解 以此题为例介绍一下图论中的最短路算法 \(Bellman\)-\(Ford\) 算法.算法的步骤和正确性证明参考文章最短路径(Bellman-Ford算法 ...
- AcWing 851. spfa求最短路 边权可能为负数。 链表 队列
#include <cstring> #include <iostream> #include <algorithm> #include <queue> ...
- 851. spfa求最短路(spfa算法模板)
给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible. 数据保证不存在负权回路. 输入格式 ...
- 851. spfa求最短路
给定一个n个点m条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出1号点到n号点的最短距离,如果无法从1号点走到n号点,则输出impossible. 数据保证不存在负权回路. 输入格式 ...
- ACM - 最短路 - AcWing 849 Dijkstra求最短路 I
AcWing 849 Dijkstra求最短路 I 题解 以此题为例介绍一下图论中的最短路算法.先让我们考虑以下问题: 给定一个 \(n\) 个点 \(m\) 条边的有向图(无向图),图中可能存在重边 ...
- 基于bellman-ford算法使用队列优化的spfa求最短路O(m),最坏O(n*m)
acwing851-spfa求最短路 #include<iostream> #include<cstring> #include<algorithm> #inclu ...
- 关于dijkstra求最短路(模板)
嗯.... dijkstra是求最短路的一种算法(废话,思维含量较低, 并且时间复杂度较为稳定,为O(n^2), 但是注意:!!!! 不能处理边权为负的情况(但SPFA可以 ...
- spfa求次短路
思路:先算出每个点到1的最短路d1[i],记录下路径,然后枚举最短路上的边 删掉之后再求一遍最短路,那么这时的最短路就可能是答案. 但是这个做法是错误的,可以被卡掉. 比如根据下面的例题生成的一个数据 ...
- acwing 850. Dijkstra求最短路 II 模板
地址 https://www.acwing.com/problem/content/description/852/ 给定一个n个点m条边的有向图,图中可能存在重边和自环,所有边权均为非负值. 请你求 ...
随机推荐
- python输出日志到文件(每天一个日志)
import logging from logging.handlers import TimedRotatingFileHandler logger = logging.getLogger('sim ...
- spring cloud详解
1.Spring boot与Spring cloud 之间的关系 Spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务 Spring ...
- 《Java基础知识》流程控制
流程控制分类: 一.顺序结构如果没有流程控制(即没有分支结构和循环结构),Java方法里面的语句是一个顺序执行流,从上到下依次执行每条语句. 二.分支结构1.if语句if语句使用布尔表达式或者布尔值作 ...
- 设计模式:规约模式(Specification-Pattern)
"其实地上本没有路,走的人多了,也便成了路"--鲁迅<故乡> 这句话很好的描述了设计模式的由来.前辈们通过实践和总结,将优秀的编程思想沉淀成设计模式,为开发者提供了解决 ...
- Fuchsia文章汇总
今日,windows时代的十年已经过去,android/ios时代的十年也行将结束,下一个十年是谁的十年? 操作系统做为软件的基石,做为基础服务的基础,因为各层应用框架的层层封装,正在变的越来越透明, ...
- 终极CURD-4-java8新特性
目录 1 概述 2 lambda表达式 2.1 lambda重要知识点总结 2.2 java内置函数接口 2.3 方法引用 2.4 构造器引用 2.5 数组引用 2.6 lambda表达式的陷阱 3 ...
- sqlserver 行转列、字符串行转列、自动生产行转列脚本
行转列,老生常谈的问题.这里总结一下网上的方法. 1.生成测试数据: CREATE TABLE human( name ), --姓名 norm ), --指标 score INT , --分数 gr ...
- 62-Weave 网络结构分析
上一节我们安装并创建了 Weave 网络,本节将部署容器并分析网络结构. 在 host1 中运行容器 bbox1: eval $(weave env) docker run --name bbox1 ...
- centos安装redis并开启多个redis实例
1.下载安装包 下载地址 : http://download.redis.io/releases/,去里面找对应的版本下载 例如 wget http://download ...
- https的原理
https目的是为了防止第三方截获信息,原理是使用非对称加密和数字证书认证传输密钥建立连接,使用密钥对称加密信息进行通讯. https建立连接的过程: 数字证书原理: