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 ...
随机推荐
- iOS内存管理系列之一:对象所有权与引用计数
当一个所有者(owner,其本身可以是任何一个Objective-C对象)做了以下某个动作时,它拥有对一个对象的所有权(ownership): 1. 创建一个对象.包括使用任何名称中包含“alloc” ...
- 利用row_number over 函数删除重复记录
开窗函数 Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是:对于每个组返回多行,而聚合函数对于每个组只返回一行 SQ ...
- QQ游戏百万人同时在线服务器架构实现
转载自:http://morton5555.blog.163.com/blog/static/976407162012013112545710/# QQ游戏于前几日终于突破了百万人同时在线的关口,向着 ...
- Frontend Development
原文链接: https://github.com/dypsilon/frontend-dev-bookmarks Frontend Development Looking for something ...
- MT9v024总结
S1: A typical READ or WRITE sequence begins by the master sending a start bit. After thestart bit, t ...
- HDU-1300(基础方程DP-遍历之前所有状态)
Problem Description In Pearlania everybody is fond of pearls. One company, called The Royal Pearl, p ...
- hdoj 1950 Bridging signals【二分求最大上升子序列长度】【LIS】
Bridging signals Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- asp 验证
<% dim redirectUrl,checkState checkState=0 MyArray = Array("127","Feb"," ...
- C# SQL 整表插入 分类: C# 2014-09-17 16:18 369人阅读 评论(2) 收藏
说明: (1)表A的一部分数据插入到表B (2)DataAccess 类,是放在DAL层下的底层类; da.StrConnection 写在DataAccess类中; //整表插入方法 private ...
- .NET开源组件
.NET模型验证组件FluentValidation 基于LINQ表达式方法链Fluent接口验证组件:FluentValidation for .NET http://www.cnblogs.com ...