SPFA顾名思义就是更快的最短路算法,是Bellman ford算法的优化,SPFA的平均复杂度大约是O(K*|E|),在一般情况下K大约是小于等于2的数,但是总有人对你心怀不轨,构造一组SPFA最坏情形下的数据来卡你,这时候SPFA的复杂度可以达到接近二次指数。SPFA的优点在于可以判断负环,这要从算法的执行方式说起。SPFA的执行过程就是不断地迭代,不断取出队首元素进行松弛直到队列为空。这个做法是是基于三角不等式的,两边之和如果小于第三边则更新第三边的最短路径长度。一个点取出后对其他店进行松弛之后,它可能还会被其他点松弛,再次入队,所以一个点会多次进入队列,如果一个点进入队列的次数大于点的数量,说明存在负环,每次该点都能被松弛并放入队列。所以SPFA有着比dijkstra独特的优势。

代码如下:

 #include<bits/stdc++.h>
using namespace std;
typedef unsigned int ui;
typedef long long ll;
typedef unsigned long long ull;
#define pf printf
#define mem(a,b) memset(a,b,sizeof(a))
#define prime1 1e9+7
#define prime2 1e9+9
#define pi 3.14159265
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define scand(x) scanf("%llf",&x)
#define f(i,a,b) for(int i=a;i<=b;i++)
#define scan(a) scanf("%d",&a)
#define mp(a,b) make_pair((a),(b))
#define P pair<int,int>
#define dbg(args) cout<<#args<<":"<<args<<endl;
#define inf 0x3f3f3f3f
const int maxn=;
int n,m,t,e;
int head[maxn],nxt[maxn],d[maxn],in[maxn];
struct node{
int v,w;
}p[maxn];
void init()
{
e=;
mem(head,-);
mem(nxt,-);
}
void addedge(int u,int v,int w)
{
p[e].v=v;
p[e].w=w;
nxt[e]=head[u];
head[u]=e++;
}
void spfa(int src)
{
f(i,,n)d[i]=inf;
d[src]=;
mem(in,false);
queue<int>q;
in[src]=;
q.push(src);
while(!q.empty())
{
int now=q.front();
q.pop();
in[now]=;
for(int i=head[now];~i;i=nxt[i])
{
if(d[p[i].v]>d[now]+p[i].w)//松弛
{
d[p[i].v]=d[now]+p[i].w;
if(!in[p[i].v])
{
q.push(p[i].v);
in[p[i].v]=;//不在队列中就入队
}
}
}
}
}
int main()
{
//freopen("input.txt","r",stdin);
//freopen("output.txt","w",stdout);
std::ios::sync_with_stdio(false);
while(scanf("%d%d",&n,&m)==&&!(n==&&m==))
{
int u,v,w;
init();
f(i,,m)
{
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
addedge(v,u,w);
}
spfa();
pf("%d\n",d[n]);
}
}

hdu2544SPFA板题的更多相关文章

  1. 【凸包板题】Gym - 101484E E. Double Fence

    http://codeforces.com/gym/101484/problem/E 题解 凸包板题 #define _CRT_SECURE_NO_WARNINGS #include<cmath ...

  2. Oil Skimming HDU - 4185(匹配板题)

    Oil Skimming Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  3. Luogu P3690【模板】Link Cut Tree (LCT板题)

    省选前刷道LCT板题(话说之前没做这道题-) CODE #include<bits/stdc++.h> using namespace std; inline void read(int ...

  4. BZOJ 1180 [CROATIAN 2009]OTOCI // BZOJ 2843 极地旅行社 // Luogu P4321 [COCI 2009] OTOCI / 极地旅行社 (LCA板题)

    emmm-标题卡着长度上限- LCT板题-(ε=ε=ε=┏(゜ロ゜;)┛) CODE #include <cctype> #include <cmath> #include & ...

  5. BZOJ 4522: [Cqoi2016]密钥破解 (Pollard-Rho板题)

    Pollard-Rho 模板 板题-没啥说的- 求逆元出来后如果是负的记得加回正数 CODE #include<bits/stdc++.h> using namespace std; ty ...

  6. AC自动机-HDU2896-模板题

    http://acm.hdu.edu.cn/showproblem.php?pid=2896 另一道AC自动机的模板题,不过这题需要记录一下具体的匹配情况. /*------------------- ...

  7. AC自动机-HDU2222-模板题

    http://acm.hdu.edu.cn/showproblem.php?pid=2222 一个AC自动机的模板题.用的kuangbin的模板,静态建Trie树.可能遇到MLE的情况要转动态建树. ...

  8. 斜率优化板题 HDU 3507 Print Article

    题目大意:输出N个数字a[N],输出的时候可以连续的输出,每连续输出一串,它的费用是 "这串数字和的平方加上一个常数M".n<=500000 我们设dp[i]表示输出到i的时 ...

  9. BZOJ 3931 / Luogu P3171 [CQOI2015]网络吞吐量 (最大流板题)

    题面 中文题目,不解释: BZOJ传送门 Luogu传送门 分析 这题建图是显然的,拆点后iii和i′i'i′连容量为吞吐量的边,根据题目要求,111和nnn的吞吐量看作∞\infty∞. 然后用di ...

随机推荐

  1. Socket.io 入门 - Renyi的博客

    Socket.io Vue 中使用 NPM 安装 npm install vue-socket.io --save npm install --save socket.io-client 引用 详情 ...

  2. 基于USB接口芯片CH372的人机接口设备设计与实现(转)

    摘 要: 基于一种新型USB 总线接口芯片CH372,设计出一种人机接口设备-USB 鼠标.阐述了CH372 的工作原理和特点,给出了系统的硬件电路图:在软件设计中,分析了HID 类设备描述符枚举过程 ...

  3. 人工智能VS投资者:股票市场上谁的胜算更高?

    人工智能研究历史渊源,当人工智能与资本投资,尤其是股票投资相结合或许听起来有些异想天开,但正如科幻作家William Gibson所言:"未来已经到来,只是分布不均." 在股票市场 ...

  4. 【转载】(String)、toString、String.valueOf的区别

    用于个人参考,查看请前往原地址http://blog.csdn.net/springk/article/details/6414017 问题讨论http://bbs.csdn.net/topics/2 ...

  5. JobScheduler 和 JobService

    使用AlarmManager.IntentService和PendingIntent相互配合,创走周期性的后台任务,实现一个完全可用的后台服务还需要手动执行以下操作.   计划一个周期性任务    ...

  6. python 初学者

    明确学习目标,不急于求成 当下是一个喧嚣.浮躁的时代.我们总是被生活中大量涌现的热点所吸引,几乎没有深度阅读和思考的时间和机会.我始终认为,学习是需要沉下心来慢慢钻研的,是长 期的:同时,学习不应该被 ...

  7. C/C++ 存储类别

    table { margin: auto; } 本文介绍 C/C++ 中的存储类别.所谓的"存储类别"究竟是什么意思? 存储类别主要指在内存中存储数据的方式,其大致牵涉到变量的三个 ...

  8. CSS+DIV自适应布局

    CSS+DIV自适应布局 1.两列布局(左右两侧,左侧固定宽度200px;右侧自适应占满) 代码如下: <!doctype html> <html> <head> ...

  9. python正则表达式之re模块使用

    python第一个正则表达式 https://www.imooc.com/learn/550 r'imooc'  Pattern Match result In [2]: import re In [ ...

  10. 老式车载导航如何支持大于4G的SD卡

    这个知识点以后会越来越没什么用,因为这类导航慢慢就会消失.记录这个,就是提醒自己如何防止以为很懂而被骗. 随着导航地图越来越大,4G的SD卡很快就不够用了,但是很不幸车载导航款式太老了,不支持大于4G ...