/*SPFA算法有两个优化算法 SLF 和 LLL:
SLF:Small Label First 策略,设要加入的节点是j,队首元素为i,若dist(j) < dist(i),则将j插入队首,否则插入队尾。
LLL:Large Label Last 策略,设队首元素为i,每次弹出时进行判断,队列中所有dist值的平均值为x,若dist(i)>x则将i插入到队尾,查找下一元素,直到找到某一i使得dist(i)<=x,则将i出对进行松弛操作。
*/
//小的dis在前
#include<bits/stdc++.h>
using namespace std;int n,m,s;//起点终点开头int u[200005],v[200005],w[200005];
int first[200005],nextt[200005];
int dis[200005];int k2=0;
void make_edge(int a,int b,int c)
{k2++;u[k2]=a;v[k2]=b;w[k2]=c;nextt[k2]=first[a];first[a]=k2;
}void clean()
{int flag=max(n,m);for(int i=1;i<=flag;i++){first[i]=-1;nextt[i]=-1;}for(int i=1;i<=n;i++){if(i==s) dis[i]=0;else dis[i]=1e9;}
}deque<int> q;
int book[200005];int main()
{cin>>n>>m>>s;clean();for(int i=1;i<=m;i++){int a,b,c;cin>>a>>b>>c;make_edge(a,b,c);}q.push_back(s);book[s]=1;while(!q.empty()){int now_node=q.front();q.pop_front();book[now_node]=0;int k=first[now_node];while(k!=-1){if(dis[v[k]]>dis[u[k]]+w[k]){dis[v[k]]=dis[u[k]]+w[k];if(book[v[k]]==0){book[v[k]]=1;if(!q.empty()/*记得判空*/&&dis[v[k]]<dis[q.front()]){q.push_front(v[k]);}else q.push_back(v[k]);}}k=nextt[k];}}for(int i=1;i<=n;i++){if(i==1) cout<<dis[i];else cout<<" "<<dis[i];}cout<<endl;return 0;
} 

转载于:https://www.cnblogs.com/KyleDeng/p/9931443.html

spfa slf优化相关推荐

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

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

  2. AcWing 342. 道路与航线 (连通块Dijkstra+拓扑序||spfa+slf优化)

    整理的算法模板:ACM算法模板总结(分类详细版) 农夫约翰正在一个新的销售区域对他的牛奶销售方案进行调查. 他想把牛奶送到T个城镇,编号为1~T. 这些城镇之间通过R条道路 (编号为1到R) 和P条航 ...

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

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

  4. 【BZOJ】4152: [AMPPZ2014]The Captain【SLF优化Spfa】

    4152: [AMPPZ2014]The Captain Time Limit: 20 Sec  Memory Limit: 256 MB Submit: 2107  Solved: 820 [Sub ...

  5. POJ1722二维spfa+优先队列优化

    题意:      给你一个有向图,然后求从起点到终点的最短,但是还有一个限制,就是总花费不能超过k,也就是说每条边上有两个权值,一个是长度,一个是花费,求满足花费的最短长度. 思路:       一开 ...

  6. 道路与航线(spfa+deque优化)

    农夫约翰正在一个新的销售区域对他的牛奶销售方案进行调查. 他想把牛奶送到T个城镇,编号为1~T. 这些城镇之间通过R条道路 (编号为1到R) 和P条航线 (编号为1到P) 连接. 每条道路 i 或者航 ...

  7. hdu4889 spfa(造数据卡spfa

    题目是给了你一个spfa+slf优化的程序,然后,让你造个数据卡掉他, 其实那个slf优化根本不算是优化,只是在某些图上可能会更好,但是可以通过直接构造图将其由原本spfa最坏nm的复杂度卡成2^n复 ...

  8. 【图论】关于邻接表建图

    邻接表 作为一名现役Oier在做过无数图论题目和搜索题目之后,可以说是相当熟悉了,但是今天做的一道题,让我对于邻接表表示直接懵逼,原来在跑最短路的时候还是明白每个数组各自的作用的,然而一旦在其它题目中 ...

  9. Here We Go(relians) Again(HDU 2722)---建图繁琐

    题目链接 题目描述 The Gorelians are a warlike race that travel the universe conquering new worlds as a form ...

  10. SPFA的两个优化:SLF与LLL

    先举出个例题:洛谷P3371 [模板]单源最短路径 一眼扫去:最短路径. spfa不接受反驳... 附上代码: #include<iostream> #include<algorit ...

最新文章

  1. oracle11g数据库升级
  2. 数据结构之C语言模拟整数数组实现
  3. Juniper NetScreen 基于源NAT转换
  4. 【Python】如何在Excel中调用Python脚本,实现数据自动化处理
  5. Vue parse之 从template到astElement 源码详解
  6. .NET 容器环境下创建应用 dump 文件
  7. C/C++如何快速区分指针数组|数组指针|函数指针|指针函数
  8. react直接使用bootstrap失效的原因
  9. 襄阳汽车职业学院计算机专业,襄阳汽车职业技术学院毕业设计模板.docx
  10. sh mysql configure_【翻译自mos文章】使用config.sh/config.bat来configureorre-con
  11. 一张图了解浏览器渲染页面的过程
  12. linux yum提示Loaded plugins: fastestmirror, security错误的解决方法
  13. BestCoder Round #4 之 Miaomiao's Geometry(2014/8/10)
  14. 使用HighCharts实现实时数据展示
  15. 优秀网站源码、编程源码大全
  16. lucene-使用htmlparser解析有编码页面
  17. CodeSmith注册
  18. UE4读取BackBuffer缓冲区贴图(屏幕表面)
  19. IPv6安装及使用手册
  20. android 一个app启动另一个App的几种方法

热门文章

  1. 如何配置VS使得可以通过域名或IP访问
  2. C++ STL算法系列5---equal() , mismatch()
  3. 由浅入深了解EventBus:(五)
  4. Chrome 强制显示最小字体为 12px的解决方法
  5. 远程团队开发10个热门的项目管理软件
  6. 动态显示没有数据时让GridView也能显示表头信息
  7. 基于opencv的摄像头脸部识别抓取及格式储存(python)
  8. linux等待队列wait_queue_head_t和wait_queue_t
  9. 小明上学201812-1
  10. 51nod-独木舟问题