SPFA 小优化*2
/* bzoj 2763 SPFA小优化 循环队列+SLF 顺面改掉自己之前手打qeueu的坏毛病*/
#include<iostream>
#include<cstring>
#include<cstdio>
#define mk make pair
#define maxn 2000010
#define N 2000000
using namespace std;
int n,m,k,s,t,num,hea[maxn],dis[maxn],c[maxn];
int x[maxn],y[maxn],z[maxn],ans=0xfffffff;
int q[maxn],head,tail;
bool f[maxn];
struct node
{
int u,v,pre,t;
}e[maxn];
void Add(int from,int to,int Dis)
{
for(int i=hea[from];i;i=e[i].pre)
if(e[i].v==to)
{
e[i].t=min(e[i].t,Dis);
return;
}
num++;
e[num].u=from;
e[num].v=to;
e[num].t=Dis;
e[num].pre=hea[from];
hea[from]=num;
}
void SPFA(int x)
{
memset(dis,/,sizeof(dis));
q[tail++]=x;f[x]=;dis[x]=;
while(head!=tail)
{
int k=q[head++];f[k]=;
if(head>N)head=;//循环队列
for(int i=hea[k];i;i=e[i].pre)
{
int v=e[i].v;
if(dis[v]>dis[k]+e[i].t)
{
dis[v]=dis[k]+e[i].t;
if(f[v]==)
{
if(dis[v]<dis[q[head]]){//SLF
if(--head<)head=N-;
q[head]=v;
}
else {
q[tail++]=v;
if(tail>N)tail=;
}
}
}
}
}
}
int main()
{
scanf("%d%d%d%d%d",&n,&m,&k,&s,&t);
s++;t++;n=n+n*k;
for(int i=;i<=m;i++)
scanf("%d%d%d",&x[i],&y[i],&z[i]),x[i]++,y[i]++;
for(int i=;i<=m;i++)
for(int j=;j<=k+;j++)
{
Add((x[i]-)*(k+)+j,(y[i]-)*(k+)+j,z[i]);
Add((y[i]-)*(k+)+j,(x[i]-)*(k+)+j,z[i]);
if(j<=k)
{
Add((x[i]-)*(k+)+j,(y[i]-)*(k+)+j+,);
Add((y[i]-)*(k+)+j,(x[i]-)*(k+)+j+,);
}
}
SPFA((s-)*(k+)+);
for(int j=;j<=k+;j++)
ans=min(ans,dis[(t-)*(k+)+j]);
printf("%d\n",ans);
return ;
}
SPFA 小优化*2的更多相关文章
- SPFA的小优化
标签:闲扯 SPFA的小优化 1. 向队尾加入元素时,如果它比对首还优,就把把它直接和队首交换. 拿一个双端队列来实现 (手写 , head ,tail STLdeque亲测及其慢) 这个小优化其 ...
- 【最短路径】 SPFA算法优化
首先先明确一个问题,SPFA是什么?(不会看什么看,一边学去,传送门),SPFA是bellman-ford的队列优化版本,只有在国内才流行SPFA这个名字,大多数人就只知道SPFA就是一个顶尖的高效算 ...
- 初识费用流 模板(spfa+slf优化) 餐巾计划问题
今天学习了最小费用最大流,是网络流算法之一.可以对于一个每条边有一个容量和一个费用(即每单位流的消耗)的图指定一个源点和汇点,求在从源点到汇点的流量最大的前提下的最小费用. 这里讲一种最基础也是最好掌 ...
- 缓存 Array.length 是老生常谈的小优化
问题 缓存 Array.length 是老生常谈的小优化. // 不缓存 for (var i = 0; i < arr.length; i++) { ... } // 缓存 var len = ...
- HDU 1535 Invitation Cards(SPFA,及其优化)
题意: 有编号1-P的站点, 有Q条公交车路线,公交车路线只从一个起点站直接到达终点站,是单向的,每条路线有它自己的车费. 有P个人早上从1出发,他们要到达每一个公交站点, 然后到了晚上再返回点1. ...
- [MySQL5.6] 最近对group commit的小优化
[MySQL5.6] 最近对group commit的小优化 http://www.tuicool.com/articles/rEZr2q 最近花了一些时间在做MySQL Group Commit的优 ...
- [BZOJ 2200][Usaco2011 Jan]道路和航线 spfa+SLF优化
Description Farmer John正在一个新的销售区域对他的牛奶销售方案进行调查.他想把牛奶送到T个城镇 (1 <= T <= 25,000),编号为1T.这些城镇之间通过R条 ...
- SPFA队列优化
spfa队列优化(用来求最短路) 实现方法: 1.存入图.可以使用链式前向星或者vocter. 2.开一个队列,先将开始的节点放入. 3.每次从队列中取出一个节点X,遍历与X相通的Y节点,查询比对 ...
- SPFA小总结
关于spfa 知识点 原始版 ---裸 应用: 一.判负环 两种方法 1.跑单源点bfs,如果某一个点入队了n-1次,存在 2.对于每个点dfs,如果此源点反被其他点更新,存在 证明:点i作为源点,d ...
随机推荐
- String、StringBuffer和StringBuilder——个人学习
1.首先说一下他们的名称区别: String——字符串常量,StringBuffer——字符串变量(线程安全),StringBuilder——字符串变量(非线程安全) 从名称就可以很明显的看出他们的基 ...
- Yarn应用程序编程实例
Yarn自带的Application示例程序:DistributedShell 和 UnManaged AM1 DistributedShell ,故名思意,是一个分布式运行shell命令的应用程序, ...
- BZOJ 4011 开店
Description 风见幽香有一个好朋友叫八云紫,她们经常一起看星星看月亮从诗词歌赋谈到人生哲学.最近她们灵机一动,打算在幻想乡开一家小店来做生意赚点钱.这样的想法当然非常好啦,但是她们也发现她们 ...
- 【Database】MySQL各版本的区别
MySQL 的官网下载地址:http://www.mysql.com/downloads/ 在这个下载界面会有几个版本的选择. 1. MySQL Community Server 社区版本,开源免费, ...
- 防止 DDoS 攻击的五个「大招」!
提到 DDoS 攻击,很多人不会陌生.上周,美国当地时间 12 月 29 日,专用虚拟服务器提供商 Linode 遭到 DDoS 攻击,直接影响其 Web 服务器的访问,其中 API 调用和管理功能受 ...
- 代理Delegate的小应用(代理日期控件和下拉框)
前言 在平时关于表格一类的的控件使用中,不可避免需要修改每个Item的值,通过在Item中嵌入不同的控件对编辑的内容进行限定,然而在表格的Item中插入的控件始终显示,当表格中item项很多的时候,会 ...
- Spring MVC 解读——@RequestMapping (2)(转)
转自:http://my.oschina.net/HeliosFly/blog/214438 Spring MVC 解读——@RequestMapping 上一篇文章中我们了解了Spring如何处理@ ...
- leetcode面试准备: Jump Game II
1 题目 Given an array of non-negative integers, you are initially positioned at the first index of the ...
- eclipse 中使用等宽字体 inconsolata
一直以来,就感觉使用 eclipse 时的那几种字体很难看,而且非等宽,空格宽度很小,排版很乱. 搜索并试用了一下,发现了字体inconsolata. 这是一个很适合编程的字体,效果如下: 非常漂亮. ...
- Node.js权威指南 (3) - Node.js基础知识
3.1 Node.js中的控制台 / 19 3.1.1 console.log方法 / 19 3.1.2 console.error方法 / 20 3.1.3 console.dir方法 / 21 3 ...