目录

spfa,是一个早已没人用的算法,就像那些麻木的人,

可谁有知道,他何时槃涅

一个已死的算法 ,重生

内容

关于\(NOI2018D1T1\)的惨案,为了以防spfa被卡。

关于简单的\(SLF\)优化和\(LLL\)优化,再此不在多戍,算了,还是说说吧。

LLL 同样使用双端队列,维护目前队列中元素到起点的距离的平均值(即 \(∑^{tail}_{i =head}dis[que[i]]/q.size()\)设该数为 k ,若 dis[now]>k ,则从队尾插入,否则从队首插入。

评:十分容易卡掉,加上一条权值巨大的边直接崩了

SLF 在使用queue作为spfa的辅助数据结构时,将队列替换为双端队列,每当插入元素 now 时,与队首进行比较,若 \(dis[q.front()] > dis[now]\),将 now从队首插入,否则从队尾插入。

评,这个算法,能让你,避免陷入求了很多次优解

这两个优化实际上没什么用,太过于与简单,稍微有心的出题人都会卡掉

我们再开看强一点的优化

容错后的SLF 定义容错值val,当满足 \(dis[now]-val>=dis[q.front()]\)时从队尾插入,否则从队首插入。

评:我一般将val,定为-1,大了就没用了

在此就不用deque的*begin()了,实际实现时注意即好。

MCFX 定义区间 [l,r] ,当入队节点的入队次数属于这个区间的时候,从队首插入,否则从队尾插入。

评:在某些毒瘤数据,真的很有用。

(这几个优化已经能过数据不刁钻的卡spfa的题,至于luogu的模板...fst qwq就是看着这几个优化来卡的...)

但是只要你val =-1 并且 加上MCFX,就能过了luogu的模板了

评:具体我也没有在网上找到,我说说自己理解的吧。容错SLF可以让你的程序不陷入局部最优解,与模拟退火类似;而mcfx优化是这样的,如过某个节点出发的大多数边都只能更新一个次解(说白了就是这个点如果是出题人用来故意让你经过多次的节点,并且每次更新会导致一次特别长的迭代,类似菊花图的根),那么它在队列中的优先级就会降低,就像你知道出题人用这个点来卡你,你竟然还把它最先拿来最先更新,肯定是不够好的。

至于 玄学优化,跳过好吗,我非

能不用 ,还是别用SPFA的,毕竟不要拿自己的命运做赌注

没有负权时,还是dijkstra吧

SPFA的优化一览的更多相关文章

  1. SPFA 小优化*2

    /* bzoj 2763 SPFA小优化 循环队列+SLF 顺面改掉自己之前手打qeueu的坏毛病*/ #include<iostream> #include<cstring> ...

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

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

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

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

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

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

  5. SPFA队列优化

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

  6. spfa + slf优化

    最近在练习费用流 , 不是要用spfa吗 ,我们教练说:ns学生写朴素的spfa说出去都让人笑 . QwQ,所以就去学了一下优化 . slf优化就是双向队列优化一下,本来想用lll优化,可是优化后我t ...

  7. 最短路--spfa+队列优化模板

    spfa普通版就不写了,优化还是要的昂,spfa是可以判负环,接受负权边和重边的,判断负环只需要另开一个数组记录每个结点的入队次数,当有任意一个结点入队大于点数就表明有负环存在 #include< ...

  8. CDOJ 1287 MC挖矿世界(Spfa+set优化)

    题目大意:原题链接 解题思路:此题要求多点最短距离,但是直接套用floyd会超时. 然后我们想直接从每一个点开始bfs就好了,但是还是会TLE,为什么呢? 因为你访问了很多次没有意义的地方,因为有些点 ...

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

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

随机推荐

  1. tmobst4

    (单选题)HTML代码: <table> <tr><td>Value 1</td><td></td></tr> &l ...

  2. Affinity Propagation

    1. 调用方法: AffinityPropagation(damping=0.5, max_iter=200, convergence_iter=15, copy=True, preference=N ...

  3. 基于TensorFlow的MNIST手写数字识别-深入

    构建多层卷积神经网络时需要多组W和偏移项b,我们封装2个方法来产生W和b 初级MNIST中用0初始化W和b,这里用噪声初始化进行对称打破,防止产生梯度0,同时用一个小的正值来初始化b避免dead ne ...

  4. 基于MXNet的im2rec.py的debug

    1.im2rec.py调试错误:multiprocessing not available, fall back to single threaded encoding imread 经过查找发现是程 ...

  5. Ansible:roles初始化系统

    简介 本文介绍ansible的roles,通过roles来实现系统的初始化,其相当于将ansible的playbook拆分.本文通过Jenkins,传参,调用playbook来初始化系统. Githu ...

  6. HTML兼容问题及解决办法

    标准浏览器子元素不会撑开父元素设置好的宽度,IE6下会的: <style> .box{ width:400px;} .left{ width:200px;height:300px;back ...

  7. 大文件切割(split)

    split提供两种方式对文件进行切割: 根据行数切割,通过-l参数指定需要切割的行数 根据大小切割,通过-b参数指定需要切割的大小 1.1 根据行数切割 如下以一个3.4G大小的日志文件做切割演示,每 ...

  8. 不重启 清空tomcat日志

    1.重定向方法清空文件 [root@localhost logs]# du -h catalina.out  查看文件大小17M catalina.out[root@localhost logs]# ...

  9. Shell脚本 一键重启

    有个程序必须用 kill -9 pid号   关闭后,才能重新启动,每次都要手动查找pid号,麻烦容易出错,写个shell脚本 就三行很方便,自动查找pid号-关闭程序-重启程序 #!/bin/bas ...

  10. Android 6.0(棉花糖)新特性

    1.支持4K显示 Android 6.0本身已经支持4K显示,会通过一定优化形式使4K内容更加清晰. 2. 启动验证 (更完整的应用权限管理) Android 6.0在开机时会自动运行验证代码,检测设 ...