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 ...
随机推荐
- wndows 7 Wifi热点
2016年09月13日 14時52分 wanglinqiang整理 Step1 cmd.exe(管理员身份运行) Step2 命令行输入[netsh wlan set hostednetwork mo ...
- jQuery遍历对象、数组、集合实例
1.jquery 遍历对象 复制代码代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ...
- PHP 7.0 安装使用与性能监测!
PHP 7.0发布,网上关于新版的介绍很多,介于 7.0 在正式发布之前已经发过若干个 Beta.8个 RC,应该不会出现重大问题.今日我将一台机器升级至 PHP 7.0 并将有关信息记录如下. 本人 ...
- Android 两个Activity进行数据传送 发送
Activity1:: Intent intent= new Intent(this, OtherActivity.class); String name = "heyiyong" ...
- 一个QT 3D转动控件
其实说到底就是不停的截图,做出的幻觉.联想起360拖动图片,也是合并图片做出的效果,可见的对GUI来说图片是一切,是最根本的解决一切问题的办法,编程仅是辅助实现手段而已,我要记住这一点. .h文件 # ...
- LeetCode解题报告:Binary Tree Postorder Traversal
Given a binary tree, return the postorder traversal of its nodes' values. For example:Given binary t ...
- perl 获取虚拟机信息
[root@master ~]# cat simple_flow.pl ! /usr/bin/perl -w use strict; use warnings; 导入 vSphere SDK for ...
- 深入浅出Node.js (9) - 玩转进程
9.1 服务模型的变迁 9.1.1 石器时代:同步 9.1.2 青铜时代:复制进程 9.1.3 白银时代:多线程 9.1.4 黄金时代:事件驱动 9.2 多进程架构 9.2.1 创建子进程 9.2.2 ...
- rspec学习02
元数据 RSpec-core存储元数据哈希每实例和组,其中包含他们的描述,声明的位置等等,这个hash控制很多RSpec核心的功能,包括输出格式化程序(访问描述和位置),和before,after钩子 ...
- poj 2253 Frogger【最小生成树变形】【kruskal】
Frogger Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 30427 Accepted: 9806 Descript ...