【模板】SPFA最短路

#include<bits/stdc++.h>
#define maxn 10005
using namespace std;
int n,m,s;
vector<int> v[maxn],w[maxn];
int dis[maxn];
bool vis[maxn];
void SPFA()
{
    memset(dis,0x3f3f3f3f,sizeof(dis));
    queue<int> q;
    dis[s]=0;
    vis[s]=1;
    q.push(s);
    while(!q.empty())
    {
        int x=q.front();
        q.pop();
        vis[x]=false;//vis标记是否在队列里
        for(int i=0;i<v[x].size();i++)
        {
            int y=v[x][i];
            if(dis[x]+w[x][i]<dis[y])
            {
                dis[y]=dis[x]+w[x][i];
                if(!vis[y])
                {
                    vis[y]=true;
                    q.push(y);
                }
            }
        }
    }
}
int main()
{
    scanf("%d%d%d",&n,&m,&s);
    for(int i=1;i<=m;i++)
    {
        int x,y,val;
        scanf("%d%d%d",&x,&y,&val);
        v[x].push_back(y);
        w[x].push_back(val);
    }
    SPFA();
    for(int i=1;i<=n;i++)
        printf("%d ",(dis[i]!=0x3f3f3f3f)?dis[i]:((1<<31)-1));
    return 0;
}

原文地址:https://www.cnblogs.com/akioi/p/12213787.html

时间: 2024-08-03 16:46:38

【模板】SPFA最短路的相关文章

hdu 4568 spfa 最短路算法+旅行商问题

http://acm.hdu.edu.cn/showproblem.php?pid=4568 Problem Description One day, a hunter named James went to a mysterious area to find the treasures. James wanted to research the area and brought all treasures that he could. The area can be represented a

基础最短路(模板 spfa)

Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去 阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个 假,可是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地

最短路模板[spfa][dijkstra+堆优化][floyd]

借bzoj1624练了一下模板(虽然正解只是floyd) spfa: #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <vector> #include <queue> using namespace std; const int INF=100001; const int maxm=10001,maxn=10

【Spfa/最短路模板】遍历所有点的最短路径

题目描述 明明暑假来济南旅游旅游,他打算游玩N个旅游景点,N-1条双向连接的道路将它们联通起来,每一条道路有固定长度.一开始明明位于1号景点.现在希望你能够求出旅行长度最小的方案,使得每个景点至少被访问到一次. 输入 第一行两个整数N,代表景点数目.接下来N-1行,每行三个整数s, t, w,表示有一条从s到t的双向道路,长度为w.s和t的编号从1开始. 输出 一行一个整数,代表能够访问每个景点至少一次的方案的最小旅行长度. #include<bits/stdc++.h> #define ll

HNU 13375 Flowery Trails (spfa最短路)

求最短路径覆盖的全部边权值和. 思路:分别从起点和终点两次求最短路,再比较两个点到起点的距离和他们之间的权值相加和是否等于最短路径. 这题很好 1 #include <cstring> 2 #include <cmath> 3 #include <queue> 4 #include <vector> 5 #include <cstdio> 6 #include <algorithm> 7 using namespace std; 8

poj1502 spfa最短路

1 //Accepted 320 KB 16 ms 2 //有n个顶点,边权用A表示 3 //给出下三角矩阵,求从一号顶点出发到各点的最短路的最大值 4 #include <cstdio> 5 #include <cstring> 6 #include <iostream> 7 #include <queue> 8 #include <cmath> 9 #include <algorithm> 10 using namespace s

hihocoder 第二十五周 spfa 最短路

其实hihocoder里的题目目前大都是模板题啊-.- 这周的是SPFA,暑假的时候有看过SPFA,不过一直用的都是Dijkstra,感觉spfa要更加简洁一点~~,今天找了一份之前一直都看不太懂所以就没怎么用的模板==,今天耐下心来观摩最终还是看懂了hh. ============================================================ 所以以后都用spfa吧~~~速度快&&避开了stl~~,写这个bolg主要是拿来记录模板的 #include &

tarjan+spfa最短路 BZOJ1179 [Apio2009] Atm

1179: [Apio2009]Atm Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 3641  Solved: 1552[Submit][Status][Discuss] Description Input 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i条道路的起点和终点的路口编号.接下来N行,每行一个整数,按顺序表示每个路口处的ATM机中的钱数.接下

SPFA 最短路

GeneralLiu 最短路 什么意思呢 其实就是字面意思喽 解法多样 就只介绍 SPFA 了 每次 用一个 "有意义" 的点 更新与之相连点 的 dis 值 (至于 dis[]数组    dis[i] 表示 源点 到 i 的最短 距离  , dis初始化无穷大) 每次 "有意义" 的更新 就把 被更新点 加入 "有意义点 的 队列" 之中去 (至于 "有意义" 就是 dis 值 变小了,变小了 才有可能 把其他点的 dis