Luogu P3371 单源最短路径

题目描述

如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度。

输入输出格式

输入格式:

第一行包含三个整数N、M、S,分别表示点的个数、有向边的个数、出发点的编号。

接下来M行每行包含三个整数Fi、Gi、Wi,分别表示第i条有向边的出发点、目标点和长度。

输出格式:

一行,包含N个用空格分隔的整数,其中第i个整数表示从点S出发到点i的最短路径长度(若S=i则最短路径长度为0,若从点S无法到达点i,则最短路径长度为2147483647)

输入输出样例

输入样例#1:

4 6 1
1 2 2
2 3 2
2 4 1
1 3 5
3 4 3
1 4 4
输出样例#1:

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 单源最短路径)的更多相关文章

  1. 【luogu P3371 单源最短路径】 模板 SPFA

    题目链接:https://www.luogu.org/problemnew/show/P3371 我永远都喜欢Flyod.dijkstra + heap.SPFA #include <cstdi ...

  2. 【luogu P3371 单源最短路径 】 模板 SPFA优化

    无优化:500ms deque优化:400ms #include <queue> #include <cstdio> #include <cstring> #inc ...

  3. 【luogu P3371 单源最短路径】 模板 dij + heap

    题目链接:https://www.luogu.org/problemnew/show/P3371#sub 堆优化迪杰斯特拉,留着以后复习用 #include <iostream> #inc ...

  4. luogu p3371 单源最短路径(dijkstral

    本来我写的对的 我就多手写了个 ios::sync_with_stdio(false); 我程序里面用了cin 还有scanf 本来想偷偷懒 我就说 我查了半天错 根本找不到的啊... 后来交了几次 ...

  5. 【luogu P3371 单源最短路】 模板 vector+SPFA

    stl真是好,,偷懒少写邻接表,, 两个STL应用使代码简短了很多.然而还是那句话,天上不会掉馅饼,程序的效率还是有所下降的.然而,效率不是全部,人们宁可牺牲三倍效率用Java而不用C语言就是最好的例 ...

  6. 洛谷P3371单源最短路径SPFA算法

    SPFA同样是一种基于贪心的算法,看过之前一篇blog的读者应该可以发现,SPFA和堆优化版的Dijkstra如此的相似,没错,但SPFA有一优点是Dijkstra没有的,就是它可以处理负边的情况. ...

  7. P3371 单源最短路径【模板】 洛谷

    https://www.luogu.org/problem/show?pid=3371 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含 ...

  8. Bellman-Ford算法 例题:P3371 单源最短路径

    看到还没人用Bellman-Ford过,赶紧水一发 lz非常弱,求各位大佬轻喷qwq 洛谷题目传送门:P3371 0."松弛"操作 如果存在一条边\((u,v)\)通过中继的方式可 ...

  9. 洛谷P3371单源最短路径Dijkstra堆优化版及优先队列杂谈

    其实堆优化版极其的简单,只要知道之前的Dijkstra怎么做,那么堆优化版就完全没有问题了. 在做之前,我们要先学会优先队列,来完成堆的任务,下面盘点了几种堆的表示方式. priority_queue ...

随机推荐

  1. mysql 8.0~MGR多成员读一致性

    一 背景:当在读节点多成员查询时可能导致数据不一致 二 三种场景   1 读多写少  AFTER    2 读写相当  AFTER_AND_BEFORE   3 读少写多  BEFORE三 数据不一致 ...

  2. centos7.6设置sftp服务

    sftp是Secure File Transfer Protocol的缩写,安全文件传送协议. CentOS自带 SSH 服务,直接配置即可 1. 查看ssh版本 sftp是基于ssh协议的,首先查看 ...

  3. JavaScript 当月第一天和最后一天

    1. 概述 1.1 说明 在项目过程中,有时候需要默认展示一个月的查询条件,即当月的第一天和最后一天. 2. 代码 2.1 代码示例 直接调用getFirstAndLastDay()即可得到当月的第一 ...

  4. HTML5 移动端Meta设置

    1.   强制让文档的宽度与设备的宽度保持1:1,并且文档最大的宽度比例是1.0,且不允许用户点击屏幕放大浏览. <meta name="viewport" content= ...

  5. 项目debug启动不起来解决办法

    debug起服务,读取文件可能会出错,eclipse自动加断点,这时候就卡住了,这时候eclipse——window——show view breakpoints-——remove all,重新启动t ...

  6. js replace替换字符串,同时替换多个方法

    在实际开发中,经常会遇到替换字符串的情况,但是大多数情况都是用replace替换一种字符串,本文介绍了如何使用replace替换多种指定的字符串,同时支持可拓展增加字符串关键字. let conten ...

  7. poj1456 Supermarket 贪心+并查集

    题目链接:http://poj.org/problem?id=1456 题意:有n个物品(0 <= n <= 10000) ,每个物品有一个价格pi和一个保质期di (1 <= pi ...

  8. Net Framework 4.7.2 覆盖 Net Framework 4.5 解决办法

    场景:由于c盘空间不够,本机pc又安装了 vs2013 和 vs2017 : 所以通过,github上的一个工具,把vs2013 卸载完毕,只留下vs2017: 导致问题由于项目需要net frame ...

  9. Mybatis Mapper接口是如何找到实现类的-源码分析

    KeyWords: Mybatis 原理,源码,Mybatis Mapper 接口实现类,代理模式,动态代理,Java动态代理,Proxy.newProxyInstance,Mapper 映射,Map ...

  10. 【webpack系列】从零搭建 webpack4+react 脚手架(五)

    本章节,我们一起来探讨以下问题:如何对编译后的文件进行gzip压缩,如何让开发环境的控制台输出更加高逼格,如何更好的对编译后的文件进行bundle分析等. 1 gzip压缩 如果你想节省带宽提高网站速 ...