SPFA可以处理带负边权的图,可以判负环,然而SPFA容易被卡,即使加了各种优化。

队列优化的贝尔福德曼:裸SPFA

//SPFA
#include<bits/stdc++.h>
using namespace std;
int head[1000005],d[1000005],l,n,m,s;
bool sign[1000005];
queue<int> q;
struct node {
int to,next,val;
} a[1000005];
void add(int from,int to,int v) {
a[++l].to=to;
a[l].val=v;
a[l].next=head[from];
head[from]=l;
}
void spfa() {
for(register int i=1; i<=n; i++)
d[i]=12345678;
d[s]=0;
sign[s]=1;
q.push(s);
while(q.size()) {
int x=q.front();
q.pop();
sign[x]=0;
for(register int i=head[x]; i; i=a[i].next) {
int cs=a[i].to,hl=a[i].val;
if(d[cs]>d[x]+hl) {
d[cs]=d[x]+hl;
if(!sign[cs]) {
sign[cs]=1;
q.push(cs);
}
}
}
}
}
int main() {
scanf("%d%d%d",&n,&m,&s);
for(register int i=1; i<=m; i++) {
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
}
spfa();
for(register int i=1; i<=n; i++)
if(i==s)cout<<0<<' ';
else printf("%d ",d[i]);
return 0;
}

【模板】裸SPFA的更多相关文章

  1. hdu 1874 畅通工程续(模板题 spfa floyd)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 spfa 模板 #include<iostream> #include<stdio ...

  2. Minimum Cost POJ - 2516 (模板题 spfa最小费用最大流)

    题意: 人回家,一步一块钱,有x个人,y个房子,求能回家的最大人数且使之费用最小 解析: 就是....套模板,,,, 建图(⊙﹏⊙)...要仔细观察呐 对于人拆不拆都可以  都能过,,,,这里贴上拆开 ...

  3. 【模板】spfa

    代码如下 #include <bits/stdc++.h> using namespace std; const int maxv=1e4+10; const int maxe=5e5+1 ...

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

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

  5. 【Luogu】P3381最小费用最大流模板(SPFA找增广路)

    题目链接 哈  学会最小费用最大流啦 思路是这样. 首先我们有一个贪心策略.如果我们每次找到单位费用和最短的一条增广路,那么显然我们可以把这条路添加到已有的流量里去——不管这条路的流量是多大,反正它能 ...

  6. 【模板】SPFA(不完全详解)

    一种最短路求法(个人觉得比DIJKSTRA好用) 用于有向图. 大概思路:从根节点开始,枚举每一个点,同时更新他们所联通的点的最短路径,如果路径被更新,则把这个点入队,一直重复这个操作直到队伍为空为止 ...

  7. 算法模板:spfa

    #include<iostream> #include<algorithm> #include<cstring> #include<string> #i ...

  8. HD1532Drainage Ditches(最大流模板裸题 + 邻接表)

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. AC日记——热浪 codevs 1557 (最短路模板题)

    1557 热浪  时间限制: 1 s  空间限制: 256000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 德克萨斯纯朴的民眾们这个夏 ...

随机推荐

  1. 剑指offer-面试题56_1-数组中只出现一次的两个数字-位运算

    /* 题目: 求数组A中只出现一次的数字,该数组中有2个数字a.b仅出现一次,其余均出现两次 */ /* 思路: 两个相同的数字异或为0. 遍历数组,得到数组中各数字异或后的结果x,结果x=a^b. ...

  2. 【37】池化层讲解(Pooling layers)

    池化层(Pooling layers) 除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性,我们来看一下.   先举一个池化层的例子,然后我们再讨论池化层的 ...

  3. form表单中给input 添加 数量可以增减的按钮

    只需给input表单增加type=number即可

  4. ES6扩展

    模板字符串和标签模板 const getCourseList = function() { // ajax return { status: true, msg: '获取成功', data: [{ i ...

  5. 错误 CS0234 命名空间“Microsoft”中不存在类型或命名空间名“Reporting”(是否缺少程序集引用?)

    VS2017 使用Microsoft Rdlc报表设计器出现以下错误: 错误 CS0234 命名空间“Microsoft”中不存在类型或命名空间名“Reporting”(是否缺少程序集引用?) 以及其 ...

  6. Vue tinymce富文本编辑器

    tinymce 官方为 vue 项目提供了一个组件 tinymce-vue 一.安装tinymce-vue npm install @tinymce/tinymce-vue -S 二.下载tinymc ...

  7. go append 函数常见操作

    1. 将切片 b 的元素追加到切片 a 之后: a = append(a, b...) 2. 复制切片 a 的元素到新的切片 b 上: 1. b = make([]T, len(a)) 2. copy ...

  8. JavaScript-事件处理程序

    DOM事件流: 1.事件冒泡 2.事件捕获 DOM2事件流: 1.事件捕获阶段 2.处于目标阶段 3.事件冒泡阶段 DOM3事件 事件处理程序: 1.HTML事件处理程序: 例一:<input ...

  9. LCP 2-分式化简

    LCP 2-分式化简 public int[] fraction(int[] cont) { int len = cont.length; int[] d = new int[]{cont[len - ...

  10. 将Python模块转变为命令行工具

    问:如何输入命令行就能执行python代码呢? 答:要将python模块转变为命令行工具只用在 setup.py 文件中添加参数entry_points 例如: entry_points={ 'con ...