【洛谷 3371】【模板】单源最短路径(spfa+slf)
来源:互联网 发布:架子鼓app软件下载 编辑:程序博客网 时间:2024/06/18 17:51
问题描述
如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度。
输入
第一行包含三个整数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
算法讨论
spfa模板。外加一个slf优化,若当前点为j,队头为i,如果d[j]
#include <cstdio>#include <deque>using namespace std;#define maxn 10006#define maxm 500006#define maxlongint 2147483647struct edge{ int f,t,w,n;}a[maxm];deque <int> q;int d[maxn],ls[maxn],n,m,s;bool v[maxn];int init(){ scanf("%d%d%d",&n,&m,&s); for (int i=1;i<=m;i++) { scanf("%d%d%d",&a[i].f,&a[i].t,&a[i].w); a[i].n=ls[a[i].f]; ls[a[i].f]=i; } return 0;}int spfa(){ for (int i=1;i<=n;i++) d[i]=maxlongint; d[s]=0; v[s]=1; q.push_back(s); while (!q.empty()) { int u=q.front(); q.pop_front(); v[u]=0; for (int i=ls[u];i;i=a[i].n) if (d[u]+a[i].w<d[a[i].t]) { d[a[i].t]=d[u]+a[i].w; if (!v[a[i].t]) { v[a[i].t]=1; if (q.empty() || d[a[i].t]>d[q.front()]) q.push_back(a[i].t); else q.push_front(a[i].t); } } } for (int i=1;i<=n;i++) printf("%d ",d[i]); return 0;}int main(){ init(); spfa(); return 0;}
Pixiv ID:63134378
阅读全文
0 0
- 【洛谷 3371】【模板】单源最短路径(spfa+slf)
- 单源最短路----Spfa模板 (SLF优化)
- SPFA模板(SLF优化)
- 【模板】Spfa单源最短路径
- 洛谷 P3371 【模板SPFA】单源最短路径
- [洛谷]P3371 单源最短路径模板 SPFA
- 请柬(双向SPFA及SLF LLL优化法模板题)
- 单源最短路径Dijkstra、BellmanFord、SPFA【模板】
- spfa进阶使用二分+SLF(洛谷1951 收费站_NOI导刊2009提高(2))
- 【模板】最短路径(Floyed&SPFA )
- spfa+记录路径模板
- spfa 的 slf 优化
- spfa优化 SLF LLL
- [图论] SPFA + SLF优化
- SPFA,SLF优化
- spfa SLF优化
- 洛谷P3371 单源最短路径(spfa)
- SPFA+SLF(链式队列) Codevs p1557热浪
- 数据结构实验之排序四:寻找大富翁
- js延迟控制图片动画显示
- 参加2017年校招及实习的一点心得
- 算法-字符串
- cat > $file <<EOF...EOF
- 【洛谷 3371】【模板】单源最短路径(spfa+slf)
- IO流的学习—File类
- 发送邮件
- 线性代数 04.01 n维向量
- Ajax-用户名验证简单例子(详解)
- java:23种设计模式详解
- Ubuntu 使用HugePage 加速应用
- Eclipse rcp 开发中常用快捷键和相关功能
- 解决 Android 中 View 的 setPivotX 和 setPivotY 不生效的问题以及设置缩放中心的方法