/* 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的更多相关文章

  1. SPFA的小优化

    标签:闲扯 SPFA的小优化 1. 向队尾加入元素时,如果它比对首还优,就把把它直接和队首交换. 拿一个双端队列来实现 (手写 , head ,tail   STLdeque亲测及其慢) 这个小优化其 ...

  2. 【最短路径】 SPFA算法优化

    首先先明确一个问题,SPFA是什么?(不会看什么看,一边学去,传送门),SPFA是bellman-ford的队列优化版本,只有在国内才流行SPFA这个名字,大多数人就只知道SPFA就是一个顶尖的高效算 ...

  3. 初识费用流 模板(spfa+slf优化) 餐巾计划问题

    今天学习了最小费用最大流,是网络流算法之一.可以对于一个每条边有一个容量和一个费用(即每单位流的消耗)的图指定一个源点和汇点,求在从源点到汇点的流量最大的前提下的最小费用. 这里讲一种最基础也是最好掌 ...

  4. 缓存 Array.length 是老生常谈的小优化

    问题 缓存 Array.length 是老生常谈的小优化. // 不缓存 for (var i = 0; i < arr.length; i++) { ... } // 缓存 var len = ...

  5. HDU 1535 Invitation Cards(SPFA,及其优化)

    题意: 有编号1-P的站点, 有Q条公交车路线,公交车路线只从一个起点站直接到达终点站,是单向的,每条路线有它自己的车费. 有P个人早上从1出发,他们要到达每一个公交站点, 然后到了晚上再返回点1. ...

  6. [MySQL5.6] 最近对group commit的小优化

    [MySQL5.6] 最近对group commit的小优化 http://www.tuicool.com/articles/rEZr2q 最近花了一些时间在做MySQL Group Commit的优 ...

  7. [BZOJ 2200][Usaco2011 Jan]道路和航线 spfa+SLF优化

    Description Farmer John正在一个新的销售区域对他的牛奶销售方案进行调查.他想把牛奶送到T个城镇 (1 <= T <= 25,000),编号为1T.这些城镇之间通过R条 ...

  8. SPFA队列优化

    spfa队列优化(用来求最短路) 实现方法: 1.存入图.可以使用链式前向星或者vocter. 2.开一个队列,先将开始的节点放入. 3.每次从队列中取出一个节点X,遍历与X相通的Y节点,查询比对   ...

  9. SPFA小总结

    关于spfa 知识点 原始版 ---裸 应用: 一.判负环 两种方法 1.跑单源点bfs,如果某一个点入队了n-1次,存在 2.对于每个点dfs,如果此源点反被其他点更新,存在 证明:点i作为源点,d ...

随机推荐

  1. C#Lambda表达式学习日记

    Lambda表达式只是用更简单的方式来写匿名方法,彻底简化了对.NET委托类型的使用. 现在,如果我们要使用泛型 List<> 的 FindAll() 方法,当你从一个集合去提取子集时,可 ...

  2. app内购提示,您已购买此商品,但未下载

    出现这样的问题,是支付没有finish造成的,一般在支付过程中断网了,下次再购买同一商品的时候就会出现这样的问题, 解决办法,在点击购买的时候判断支付队列中是否有为finish的商品,若有,则进行处理 ...

  3. Alice's Chance

    poj1698:http://poj.org/problem?id=1698 题意:爱丽丝要拍电影,有n部电影,规定爱丽丝每部电影在每个礼拜只有固定的几天可以拍电影,只可以拍前面w个礼拜,并且这部电影 ...

  4. codeforces C. Painting Fence

    http://codeforces.com/contest/448/problem/C 题意:给你n宽度为1,高度为ai的木板,然后用刷子刷颜色,可以横着刷.刷着刷,问最少刷多少次可以全部刷上颜色. ...

  5. 连接MySQL数据库得到错误“Unable to find the requested .Net Framework Data Provider”

      Registering DbProviderFactories Each .NET Framework data provider that supports a factory-based cl ...

  6. 网络流(费用流)CodeForces 321B:Ciel and Duel

    Fox Ciel is playing a card game with her friend Jiro. Jiro has n cards, each one has two attributes: ...

  7. canvas——画板

    注意部分: canvas的height和width不能再css中设定,应该在html中设定,否则会影响页面的分辨率. 效果图: 图1: 代码 css: #canvas{ cursor: crossha ...

  8. Unity Chan Advanced

    1. 8X MSAA 2. SMAA 3. ViewSpace Outline 4. Unity Chan Skin 5. Shift Toon Lighting 6. DOF 7. Bloom

  9. An Easy Problem?! - POJ 2826(求面积)

    题目大意:有两块木板交叉起来接雨水,问最多能接多少.   分析:题目描述很简单,不过有些细节还是需要注意到,如下图几种情况:   #include<stdio.h> #include< ...

  10. 【长篇高能】ReactiveCocoa 和 MVVM 入门

    翻译自ReactiveCocoa and MVVM, an Introduction. 文中引用的 Gist 可能无法显示.为了和谐社会, 请科学上网. MVC 任何一个正经开发过一阵子软件的人都熟悉 ...