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. 模拟stringBeanFactory解析xml

    思路:根据源码分析,将配置Bean类信息存放到xml文件中,通过解析xml, 然后反射拿到对象 存放到集合中 这里选择hashmap(键放置类名,值放置对象)存放,使用时使用get方法通过键(类名)拿 ...

  2. Python 数据分析4

    本章概要 数据加载.存储与文件格式 数据加载.存储与文件格式 读取文本格式数据 read_csv 默认是按照逗号分割,也可设定其他分割符 df = pd.read_csv('file', sep='| ...

  3. vue.js学习系列-第二篇

    一 VUE实例生命周期钩子     1 生命周期函数         定义 生命周期函数就是vue在某一时间点自动执行的函数 2 具体函数      1 new vue()      2 before ...

  4. Tomcat实现反向代理

    实验环境搭建: web server             Director: 192.168.11.131(host-only)     192.168.1.114(桥接)   安装好Apache ...

  5. Spring Cloud 2-Hystrix DashBoard仪表盘(五)

    Spring Cloud  Hystrix DashBoard  1.监控系统配置 pom.xml application.yml Application.java 2.被监控服务配置 pom.xml ...

  6. 023_System Integrity Protection in macos

    背景:之前写的在/usr/bin下的一个登陆线上脚本,由于使用timemachine还原了系统,发现怎么也修改不了,加sudo也不行. 后来查询才得知系统默认开启了"系统集成保护" ...

  7. 分组PARTITION BY及游标CURSOR的用法

    基础数据表: select * from dbo.RecommendationChanelVersionRelation: 数据如下: 要求按照ChannelVersionID分组,对每组中的Orde ...

  8. linux环境变量问题

    在使用jenkins进行自动化部署的时候遇到一个问题,通过jenkins进行自动化部署的时候执行java命令时,提示java不知道是啥命令,确定是装好了java的,猜测是环境变量问题,但是在/etc/ ...

  9. python设置虚拟环境

    一.介绍 虚拟环境-virtualenv是一个用于隔绝的python环境的工具,虚拟环境与本地环境互相隔离,互不影响,例如我们要安装django2.0的版本但是本地已经安装了1.1的,这时只需要在本地 ...

  10. Oracle数据安全解决方案(1)——透明数据加密TDE

    Oracle数据安全解决方案(1)——透明数据加密TDE2009年09月23日 22:49:00 华仔爱技术 阅读数:7991原文地址: http://www.oracle.com/technolog ...