最短路 spfa+STL
与迪杰斯特拉相同的是spfa也是用来求单源点的最短路径问题,但是,当问题中的边是有向负边的时候,迪杰斯特拉就无能为力了,
而且给我的感觉是spfa如何结合STL来用的话代码比迪杰斯特拉的还要短一点,只是在思路上会比它稍微复杂一点点。spfa的原理:
同样设置一个数组d[maxn]用来保存源点到各点的距离,初始化为无穷打,同时定义一个队列que,初始化为空,然后还要定义一个数组visit[maxn],
用来标记当前的某个点是否在队列当中,初始化为false。算法第一步,把源点加入到队列中,然后用源点去更新源点到它可以到达的点的距离,
如果这个源点到这个点的距离可以被更新,而且队列中没有这个点的话,就把这个点加入到队列中。然后继续从队首弹出一个点,然后同理用这个点
去更新其它的点,重复下去直到队列为空,这时结果就出来了。下面是我A的第一个spfa的代码,用邻接表的,小小的纪念一下。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<deque>
using namespace std; typedef struct node
{
int d,len;
node *next;
}Linklist;
typedef struct Node
{
int tot;
Linklist *next;
Node()
{
tot = ;
next = NULL;
}
}linklist;
linklist rode[]; int d[],visit[];
void push(int u,int v,int l)
{
Linklist *q = new Linklist;
q->d = v;
q->len = l;
q->next = NULL;
rode[u].tot++;
if(rode[u].next == NULL)
{
rode[u].next = q;
return ;
}
Linklist *p = rode[u].next;
while(p->next)
p = p->next;
p->next = q;
} int main()
{
int n,m,u,v,l;
scanf("%d%d",&n,&m);
for(int i = ;i < m;++i)
{
scanf("%d%d%d",&u,&v,&l);
push(u,v,l);
}
deque<int> que;
deque<int>::iterator iter;
que.push_back();
memset(d,0x3f,sizeof(d));
memset(visit,,sizeof(visit));
visit[] = ;
d[] = ;
while(!que.empty())
{
int temp = *(que.begin());
que.pop_front();
visit[temp] = ;
Linklist *p = rode[temp].next;
while(p)
{
if(d[temp] + p->len < d[p->d])
{
d[p->d] = d[temp] + p->len;
if(!visit[p->d])
{
que.push_back(p->d);
visit[p->d] = ;
}
}
p = p->next;
}
}
for(int i = ;i <= n;++i)
printf("%d\n",d[i]);
return ;
}
最短路 spfa+STL的更多相关文章
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...
- L - Subway(最短路spfa)
L - Subway(最短路spfa) You have just moved from a quiet Waterloo neighbourhood to a big, noisy city. In ...
- ACM/ICPC 之 最短路-SPFA+正逆邻接表(POJ1511(ZOJ2008))
求单源最短路到其余各点,然后返回源点的总最短路长,以构造邻接表的方法不同分为两种解法. POJ1511(ZOJ2008)-Invitation Cards 改变构造邻接表的方法后,分为两种解法 解法一 ...
- POJ 1847 Tram --set实现最短路SPFA
题意很好懂,但是不好下手.这里可以把每个点编个号(1-25),看做一个点,然后能够到达即为其两个点的编号之间有边,形成一幅图,然后求最短路的问题.并且pre数组记录前驱节点,print_path()方 ...
- 【POJ】3255 Roadblocks(次短路+spfa)
http://poj.org/problem?id=3255 同匈牙利游戏. 但是我发现了一个致命bug. 就是在匈牙利那篇,应该dis2单独if,而不是else if,因为dis2和dis1相对独立 ...
- 【wikioi】1269 匈牙利游戏(次短路+spfa)
http://www.wikioi.com/problem/1269/ 噗,想不到.. 次短路就是在松弛的时候做下手脚. 设d1为最短路,d2为次短路 有 d1[v]>d1[u]+w(u, v) ...
- POJ 1511 最短路spfa
题很简单 就是有向图中求给出的源点到其余所有点的最短路的和与其余所有点到源点的最短路之和 一开始以为dij对于正权图的单源最短路是最快的 写了一发邻接表的dij 结果超时 把所有的cin改成scanf ...
- Layout---poj3169(差分约束+最短路spfa)
题目链接:http://poj.org/problem?id=3169 有n头牛站成一排 在他们之间有一些牛的关系比较好,所以彼此之间的距离不超过一定距离:也有一些关系不好的牛,希望彼此之间的距离大于 ...
- LightOJ 1074 Extended Traffic (最短路spfa+标记负环点)
Extended Traffic 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/O Description Dhaka city ...
随机推荐
- redis 事务,持久化,日志,主从,VM
redis目前对事务的支持比较简单,只能保证一个客户端连接发起事务中的命令可以连续执行,而中间不会插入其他客户端的命令. 1.事务 一般情况下,redis接收到一个客户端发送的命令,立刻执行并返回结果 ...
- ElasticSearch 2 (24) - 语言处理系列之停用词:性能与精度
ElasticSearch 2 (24) - 语言处理系列之停用词:性能与精度 摘要 在信息检索早期,磁盘和内存相较我们今天的使用只是很小的一部分.将索引空间保持在一个较小的水平是至关重要的,节省每个 ...
- vue如何触发某个元素的单击事件?
<a class="link" @click.native="test">1111</a> <a class="link ...
- cdq分治解决三维偏序
问题背景 在三维坐标系中有n个点,坐标为(xi,yi,zi). 定义一个点A比一个点B小,当且仅当xA<=xB,yA<=yB,zA<=zB.问对于每个点,有多少个点比它小.(n< ...
- Educational Codeforces Round 35 (Rated for Div. 2)A,B,C,D
A. Nearest Minimums time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- 【题解】 bzoj2115: [Wc2011] Xor (线性基+dfs)
bzoj2115,戳我戳我 Solution: 看得题解(逃,我太菜了,想不出这种做法 那么丢个链接 Attention: 板子别写错了 又写错了这次 \(long long\)是左移63位,多了会溢 ...
- 【字符串算法3】浅谈KMP算法
[字符串算法1] 字符串Hash(优雅的暴力) [字符串算法2]Manacher算法 [字符串算法3]KMP算法 这里将讲述 [字符串算法3]KMP算法 Part1 理解KMP的精髓和思想 其实KM ...
- 分库分表中间件sharding-jdbc的使用
数据分片产生的背景,可以查看https://shardingsphere.apache.org/document/current/cn/features/sharding/,包括了垂直拆分和水平拆分的 ...
- IntelliJ IDEA的安装和使用教程
1. 安装IntelliJ IDEA IntelliJ IDEA(简称"IDEA")是Java语言的集成开发环境,它是JetBrains公司的产品之一.详情请看:JetBrains ...
- 解题:SPOJ 422 Transposing is Even More Fun
题面 这种换来换去的东西很容易想到置换群那一套,然后题目甚至还暗示了二进制=.= 直接换的话显然是$2^{a+b}$次,但是一个循环节里可以少换一次,然后问题就变成了数循环节 在一个循环节里的位置有什 ...