Luogu 3371【模板】单源最短路径

第一次写博客用图论题来试一试

接下来是正文部分

题目描述

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

输入输出格式

输入格式:

第一行包含三个整数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做的,所以我来说一下spfa的基本用法。

更稳定的算法详见hl666大佬的博客

#include<bits/stdc++.h>
#define maxn 10000+5
#define maxm 500000+5
using namespace std;
int la[maxm],ne[maxm],co[maxm],lnk[maxn],dis[maxn],tot=0,n,m,s,q[maxm*2];
//la[],ne[],co[],lnk[]是邻接表用的数组,dis[]表示起始点到各点的距离,q[]是队列数组
bool f[maxn];//f[i]表示i点是否在队中
int read(){
char c=getchar();
while(c<'0'||c>'9')c=getchar();int x=0;
while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
return x;
}
void add(int x,int y,int z){
ne[++tot]=y;co[tot]=z;la[tot]=lnk[x];lnk[x]=tot;
}//邻接表
void spfa(int x){
for(int i=1;i<=n;i++)f[i]=true;//true表示该点没有在队中
for(int i=1;i<=n;i++)dis[i]=23333333;//初始化
int h=0,t=1;q[1]=x;f[x]=false;dis[x]=0;
while(h<t){
int u=q[++h];//将队首取出
for(int k=lnk[u];k;k=la[k])//以点u为中转点
if(dis[u]+co[k]<dis[ne[k]]){
dis[ne[k]]=dis[u]+co[k];
if(f[ne[k]])q[++t]=ne[k],f[ne[k]]=false;//防止队列溢出
}
f[u]=true;
}
}
int main(){
n=read();m=read();s=read();
for(int i=1;i<=m;i++){int x=read(),y=read(),z=read();add(x,y,z);}
spfa(s);
for(int i=1;i<=n;i++)if(dis[i]>2333333)printf("2147483647 ");else printf("%d ",dis[i]);
return 0;
}

Luogu 3371【模板】单源最短路径的更多相关文章

  1. luogu P3371 & P4779 单源最短路径spfa & 最大堆优化Dijkstra算法

    P3371 [模板]单源最短路径(弱化版) 题目背景 本题测试数据为随机数据,在考试中可能会出现构造数据让SPFA不通过,如有需要请移步 P4779. 题目描述 如题,给出一个有向图,请输出从某一点出 ...

  2. [模板]单源最短路径(Dijkstra)

    如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 主要还是再打一遍最短路,这种算法我用的不多... #include<bits/stdc++.h> using namesp ...

  3. 【洛谷 p3371】模板-单源最短路径(图论)

    题目:给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 解法:spfa算法. 1 #include<cstdio> 2 #include<cstdlib> 3 #in ...

  4. 【原创】洛谷 LUOGU P3371 【模板】单源最短路径

    P3371 [模板]单源最短路径 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数.出 ...

  5. 洛谷P4779 【模板】单源最短路径

    P4779 [模板]单源最短路径(标准版) 题目链接 https://www.luogu.org/problemnew/show/P4779 题目描述 给定一个 N个点,M条有向边的带非负权图,请你计 ...

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

    P3371 [模板]单源最短路径 282通过 1.1K提交 题目提供者HansBug 标签 难度普及/提高- 提交  讨论  题解 最新讨论 不萌也是新,老司机求带 求看,spfa跑模板40分 为什么 ...

  7. SPFA板子 (背景:Luogu P3371 单源最短路径)

    Luogu P3371 单源最短路径 题目描述 如题,给出一个有向图,请输出从某一点出发到所有点的最短路径长度. 输入输出格式 输入格式: 第一行包含三个整数N.M.S,分别表示点的个数.有向边的个数 ...

  8. 最短路径 SPFA P3371 【模板】单源最短路径(弱化版)

    P3371 [模板]单源最短路径(弱化版) SPFA算法: SPFA 算法是 Bellman-Ford算法 的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环.SPFA 最坏情况下复 ...

  9. P4779 【模板】单源最短路径(标准版)

    P4779 [模板]单源最短路径(标准版) 求单源最短路, 输出距离 Solution \(nlogn\) 堆优化 \(Djs\) Code #include<iostream> #inc ...

随机推荐

  1. Windows elasticsearch1.5.1安装

    http.cors.enabled: true http.cors.allow-origin: /.*/ network.host: 192.168.2.200 http.port: cluster. ...

  2. Android Connection refused

    遇到 Connection refused的错误. AndroidManifest.xml  文件中添加: //网络权限 <uses-permission android:name=" ...

  3. LOJ2276 [HAOI2017] 新型城市化 【二分图匹配】【tarjan】

    题目分析: 这题出的好! 首先问题肯定是二分图的最大独立集,如果删去某条匹配边之后独立集是否会变大. 跑出最大流之后流满的边就是匹配边. 如果一个匹配边的两个端点在一个强连通分量里,那这条边删掉之后我 ...

  4. VSCode的Markdown All in One插件,列表选项卡只有3个空格的解决方案

    Q: 在win10中,列表选项卡只有3个空格,非列表是正常的4个空格: A: 设置Markdown All in One的list.indentationSize: Thank You For yzh ...

  5. 定向耦合器 Directional Couplers

    microwave101,干货比较多 传送门:https://www.microwaves101.com/encyclopedias/directional-couplers Directional ...

  6. React踩坑记

    一: Support for the experimental syntax 'classProperties' isn't currently enabled ERROR in ./src/inde ...

  7. 解决php -v查看到版本与phpinfo()版本不一致问题

    安装p7后发现phpinfo的版本是7.2.12,而php -v查看的却是5.4.16 应该是php.ini的配置文件有问题. 查看文件,有两个 查看cli执行的文件是哪一个? 再查看phpinfo用 ...

  8. 2017-12-20python全栈9期第五天第二节之字典的增删查改和字典的for循环

    #!/user/bin/python# -*- coding:utf-8 -*-dic1 = {'age':24,'name':'zd','sex':'boy'}print(dic1)#增dic1[' ...

  9. JGUI源码:右键菜单实现(12)

    1.要想实现右键菜单,就要先能响应右键函数 $('#down').mousedown(function(e){ if(3 == e.which){ alert('这是右键单击事件'); }else i ...

  10. [笔记]JS flat and flatMap

    原文 flat()接收一个数组(这个数组中的某些item本身也是一个数组),返回一个新的一维数组(如果没有特别指定depth参数的话返回一维数组). const nestedArraysOhMy = ...