SPFA板子 (背景:Luogu P3371 单源最短路径)
Luogu P3371 单源最短路径
题目描述
如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度。
输入输出格式
输入格式:
第一行包含三个整数N、M、S,分别表示点的个数、有向边的个数、出发点的编号。
接下来M行每行包含三个整数Fi、Gi、Wi,分别表示第i条有向边的出发点、目标点和长度。
输出格式:
一行,包含N个用空格分隔的整数,其中第i个整数表示从点S出发到点i的最短路径长度(若S=i则最短路径长度为0,若从点S无法到达点i,则最短路径长度为2147483647)
输入输出样例
4 6 1
1 2 2
2 3 2
2 4 1
1 3 5
3 4 3
1 4 4
0 2 4 3
分析:
啊无负边权的有向图的单源最短路径
代码+注释:
#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
#define MAXN 10005
#define MAXM 500005
using namespace std; const long long MAX = ; int n, m, p_st;
int x, y, d;
vector<int> l[MAXN], dis[MAXN]; //采用邻接表的存储方式
int ans_dis[MAXN]; //答案储存数组
bool visited[MAXN]; //标记是否被访问过 void read(int a, int b, int d) { //邻接表的读入
l[a].push_back(b);
dis[a].push_back(d);
} void spfa() { //不就是按照BFS打一波… queue<int> q; //新建队列
visited[p_st] = true; //源点设为已经访问过了
ans_dis[p_st] = ; //到源点的最短路径为0
q.push(p_st); //进队开始BFS while (!q.empty()) { //开始BFS
int now = q.front(); //now为目前所在的点
for (int i = ; i < l[now].size(); i++) { //在它周围可以去到的点里绕一圈
int u = l[now][i], v = dis[now][i]; //u表示目前遍历到的点 v为目前的点到u的距离
if (ans_dis[u] > ans_dis[now] + v) //若可更新距离
{
ans_dis[u] = ans_dis[now] + v; //更新
if (!visited[u]) {
visited[u] = true; //标记访问过
q.push(u); //拉进队列
}
}
} visited[now] = false; // 不要忘记打这一句兄dei SFPA和BFS不同点
q.pop(); // 出队
} } int main() { scanf("%d%d%d", &n, &m, &p_st); //N为点的个数 M为有向边的个数 P_ST为出发点的编号
for (int i = ; i <= n; i++)
ans_dis[i] = MAX / ; //当然是为了防止判断的时候爆炸而设定的
for (int i = ; i <= m; i++) {
scanf("%d%d%d", &x, &y, &d);
read(x, y, d);
} spfa(); for (int i = ; i <= n; i++)
if (ans_dis[i] == MAX / ) printf("%lld ", MAX); //到不了这个点
else printf("%d ", ans_dis[i]); //到得了就输出 return ;
}
(仅供个人复习使用)
SPFA板子 (背景:Luogu P3371 单源最短路径)的更多相关文章
- 【luogu P3371 单源最短路径】 模板 SPFA
题目链接:https://www.luogu.org/problemnew/show/P3371 我永远都喜欢Flyod.dijkstra + heap.SPFA #include <cstdi ...
- 【luogu P3371 单源最短路径 】 模板 SPFA优化
无优化:500ms deque优化:400ms #include <queue> #include <cstdio> #include <cstring> #inc ...
- 【luogu P3371 单源最短路径】 模板 dij + heap
题目链接:https://www.luogu.org/problemnew/show/P3371#sub 堆优化迪杰斯特拉,留着以后复习用 #include <iostream> #inc ...
- luogu p3371 单源最短路径(dijkstral
本来我写的对的 我就多手写了个 ios::sync_with_stdio(false); 我程序里面用了cin 还有scanf 本来想偷偷懒 我就说 我查了半天错 根本找不到的啊... 后来交了几次 ...
- 【luogu P3371 单源最短路】 模板 vector+SPFA
stl真是好,,偷懒少写邻接表,, 两个STL应用使代码简短了很多.然而还是那句话,天上不会掉馅饼,程序的效率还是有所下降的.然而,效率不是全部,人们宁可牺牲三倍效率用Java而不用C语言就是最好的例 ...
- 洛谷P3371单源最短路径SPFA算法
SPFA同样是一种基于贪心的算法,看过之前一篇blog的读者应该可以发现,SPFA和堆优化版的Dijkstra如此的相似,没错,但SPFA有一优点是Dijkstra没有的,就是它可以处理负边的情况. ...
- P3371 单源最短路径【模板】 洛谷
https://www.luogu.org/problem/show?pid=3371 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含 ...
- Bellman-Ford算法 例题:P3371 单源最短路径
看到还没人用Bellman-Ford过,赶紧水一发 lz非常弱,求各位大佬轻喷qwq 洛谷题目传送门:P3371 0."松弛"操作 如果存在一条边\((u,v)\)通过中继的方式可 ...
- 洛谷P3371单源最短路径Dijkstra堆优化版及优先队列杂谈
其实堆优化版极其的简单,只要知道之前的Dijkstra怎么做,那么堆优化版就完全没有问题了. 在做之前,我们要先学会优先队列,来完成堆的任务,下面盘点了几种堆的表示方式. priority_queue ...
随机推荐
- TP5框架,开源小程序商城源码,前端+后台完整版
CRMEB微信公众号商城小程序商城数据同步,带积分.优惠券.秒杀.砍价.分销等功能,更是一套方便二次开发的框架 开源地址:https://github.crmeb.net/u/crmeb 商城演示后台 ...
- linux 查看/修改jdk版本
linux 查看/修改jdk版本 配置环境变量vim /etc/profile 编辑profile文件 在底部加入JAVA_HOME=/usr/java/jdk1.8PATH=$JAVA_HOME/b ...
- sqli注入--利用information_schema配合双查询报错注入
目录 sqli-labs 5.6双查询报错注入通关 0x01 获取目标库名 0x02 获取库中表的数量 0x03 获取库中表名 0x04 获取目标表中的列数 0x05 获取目标表的列名 0x06 从列 ...
- L2-010 排座位 (25 分) (最短路)
链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805066135879680 题目: 布置宴席最微妙的事情,就是给前 ...
- UGUI打字机效果文本组件
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; ...
- java的方法重写 ,多态和关键字 instanceof和final
package cn.pen; /*final 是一个java的关键字,用于修饰局部变量.属性.方法.类,表示最终的意思. final修饰类表示最终类,无法被继承.public final class ...
- js 对象,数组,字符串,相互转换
1:对象转换数组 let obj = {'val1':1, 'val2':2, 'val3':3, 'val4':4}; var arr = [] for (let i in obj) { //取键 ...
- javascript--实现几个简单的操作
利用JS实现几个简单的功能 --还有省市联动,商品的左右选择,表单的校验.但在学了jQuery之后,感觉这个没那么重要了,就不写了 表格的全选和全不选 表格的动态隔行换色 <!DOCTYPE h ...
- vertx模块HAManager高可用
HAManager public HAManager(VertxInternal vertx, DeploymentManager deploymentManager, ClusterManager ...
- Python 包管理(PYPA)
Python包的管理可以通过Python 自带的管理 工具,例如:package-autoremove,package-list-packages, package-install 等,使用起来也非常 ...