【模板】SPFA

单源最短路径算法,可判负环(如果一个点进队超过N次,则存在负环)

 1 #include<stdio.h>
 2 #define maxv 10005
 3 #define maxe 500005
 4 #define inf 210000000
 5 int vert,edg,tot,s,fr[maxv],to[maxe],nxt[maxe],w[maxe],que[maxe],dist[maxv];
 6 bool inq[maxv];
 7 void adde(int p,int q,int W)
 8 {to[++tot]=q;w[tot]=W;nxt[tot]=fr[p];fr[p]=tot;}
 9 void spfa();
10 int main()
11 {
12     scanf("%d%d%d",&vert,&edg,&s);
13     int i,p,q,W;
14     for(i=1;i<=edg;i++)
15         scanf("%d%d%d",&p,&q,&W),adde(p,q,W);
16     spfa();
17     for(i=1;i<=vert;i++) printf("%d ",dist[i]);
18     return 0;
19 }
20 void spfa()
21 {
22     int l=0,r=0,i,now,t;
23     for(i=1;i<=vert;i++) dist[i] = inf;
24     dist[s] = 0;que[++r] = s; inq[s] = true;
25     while(l<r)
26     {
27         now = que[++l];
28         inq[now] = false;
29         for(i=fr[now];i;i=nxt[i])
30         {
31             t = to[i];
32             if(dist[t]>dist[now]+w[i])
33             {
34                 dist[t] = dist[now]+w[i];
35                 if(!inq[t]){que[++r]=t;inq[t]=true;}
36             }
37         }
38     }
39 }

时间: 2024-11-05 13:39:05

【模板】SPFA的相关文章

最短路模板[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)

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

【费用流】【Next Array】费用流模板(spfa版)

一.非结构体版 1 #include<cstdio> 2 #include<algorithm> 3 #include<cstring> 4 #include<queue> 5 using namespace std; 6 #define MAXN 501 7 #define MAXM 50001 8 #define INF 2147483647 9 int S,T; 10 int en,u[MAXM],v[MAXM],first[MAXN],next[MA

poj 3159 candies (差分约束 spfa+stack)

http://poj.org/problem?id=3159 题意:一个班有n个人 每人分到若干糖果 且u的糖果数不能比v少w个 求第1个人与第n个人最大数量差 照着模板spfa+queue果断tle了 之后照着题解说的把queue改成stack就过了 但是还不明白为什么会快 而且如果用数组直接模拟会比stl更快 #include<cstdio> #include<cstring> #include<iostream> #include<algorithm>

【日常学习】【Dijkstra堆优化】codevs2038 香甜的黄油题解

转载请注明出处 [ametake版权所有]http://blog.csdn.net/ametake 先放上题目,出自USACO 题目描述 Description 农夫John发现做出全威斯康辛州最甜的黄油的方法:糖.把糖放在一片牧场上,他知道N(1<=N<=500)只奶牛会过来舔它,这样就能做出能卖好价钱的超甜黄油.当然,他将付出额外的费用在奶牛上. 农夫John很狡猾.他知道他可以训练这些奶牛,让它们在听到铃声时去一个特定的牧场.他打算将糖放在那里然后下午发出铃声,以至他可以在晚上挤奶. 农

《挑战程序设计竞赛》2.5 它们其实都是图

poj 2139 Six Degrees of Cowvin Baconfloyd的模板题. 建图的时候记得i==j的时候ma[i][j]=0;其他情况是inf 1 #include <iostream> 2 #include <algorithm> 3 using namespace std; 4 5 int N,M; 6 const int maxn=305; 7 const int INF=0x3f3f3f3f; 8 int d[maxn][maxn],a[maxn]; 9

HDU 3667

http://acm.hdu.edu.cn/showproblem.php?pid=3667 最小费用最大流 本题流量和费用不是线性关系,fee=a*flow*flow,所以常规套模板spfa无法得到最小费用 观察到每条边流量上限只有5,则可以把一条流量为f的边拆成f条流量为1的边,每条边费用是a*(2*i-1)(1<=i<=f) #include <iostream> #include <cstring> #include <cstdio> #includ

畅通工程续 (SPFA模板Floy模板)

http://acm.hdu.edu.cn/showproblem.php?pid=1874 SPFA #include <iostream> #include <stdio.h> #include <string.h> #include <stdlib.h> #define N 1000001 using namespace std; int n,m; int v[202],dis[202]; struct node { int x,y,z,next; }

【模板】负环(spfa)

洛谷——P3385 [模板]负环 题目描述 暴力枚举/SPFA/Bellman-ford/奇怪的贪心/超神搜索 输入输出格式 输入格式: 第一行一个正整数T表示数据组数,对于每组数据: 第一行两个正整数N M,表示图有N个顶点,M条边 接下来M行,每行三个整数a b w,表示a->b有一条权值为w的边(若w<0则为单向,否则双向) 输出格式: 共T行.对于每组数据,存在负环则输出一行"YE5"(不含引号),否则输出一行"N0"(不含引号). 输入输出样例

POJ 2449Remmarguts&#39; Date K短路模板 A*+SPFA

太水了我不想说了,模板在这里 14312K 313MS 1 #include<queue> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 int v[100010],v2[100010],c[100010],c2[100010],s,t,k,duin; 7 int n,m,point[1010],next[100010],cnt=0,