今天在知乎上看见一位奆佬评论
https://www.zhihu.com/question/292283275
总结来说:现在在图论算法中 随手卡
S
P
F
A
SPFA
SPFA已经是业界常识。
S
P
F
A
SPFA
SPFA的受到怀疑和最终消亡 是
O
I
OI
OI界水平普遍提高、命题规范完善和出题人使命感和责任心增强的最好见证…竟然把
S
P
F
A
SPFA
SPFA当成骗分算法
这个讨论因何而起呢 主要是
N
O
I
2018
D
a
y
1
T
1
NOI2018Day1T1
NOI2018Day1T1归程出题人卡
S
P
F
A
SPFA
SPFA使得众多奆佬挂在这道题上 出题人也在讲题中说
S
P
F
A
SPFA
SPFA已经死了. 所以众多吐槽纷纷而起
看完感觉十分受益 那么我们一一介绍
首先是我们熟悉的
S
L
F
SLF
SLF以及
L
L
L
LLL
LLL优化 具体在这篇优秀的道路与航线题解中
传送门:
S
P
F
A
SPFA
SPFA的两种优化
1.
L
L
L
LLL
LLL优化:每次将入队结点距离和队内距离平均值比较,如果更大则插入至队尾。
H
a
c
k
Hack
Hack:向 1 连接一条权值巨大的边,这样
L
L
L
LLL
LLL 就失效了。
2.
S
L
F
SLF
SLF 优化:每次将入队结点距离和队首比较,如果更大则插入至队尾。
H
a
c
k
Hack
Hack:使用链套菊花的方法,在链上用几个并列在一起的小边权边就能欺骗算法多次进入菊花。
3.
S
L
F
SLF
SLF 带容错:每次将入队结点距离和队首比较,如果比队首大超过一定值则插入至队尾。
H
a
c
k
Hack
Hack:如果边权之和很小的话似乎没有什么很好的办法,因为令边权之和为
W
W
W那么令容错值为
W
\sqrt{W}
W,总复杂度似乎接近
O
(
(
V
+
E
)
W
)
O((V+E)\sqrt{W})
O((V+E)W)。
S
P
F
A
SPFA
SPFA 确实在边权和小的时候跑得蛮不错的。所以卡法是卡
S
L
F
SLF
SLF 的做法,并开大边权,总和最好超过
1
0
12
10^{12}
1012
4.
m
c
f
x
mcfx
mcfx 优化
(
t
h
a
n
k
s
t
o
m
c
f
x
a
n
d
@
y
f
z
c
s
c
)
(thanks\,\,\, to\,\,\, mcfx\,\,\, and\,\,\, @yfzcsc)
(thankstomcfxand@yfzcsc)在第
[
L
,
R
]
[L,R]
[L,R]次访问一个结点时,将其放入队首,否则放入队尾。通常取
L
=
2
,
R
=
V
L=2, R=\sqrt{V}
L=2,R=V。
H
a
c
k
Hack
Hack:网格图表现优秀,但是菊花图表现很差。
P
.
S
.
P.S.
P.S. 此优化与
S
L
F
SLF
SLF 带容错一起使用有更好的效果,可以使所需要的边权上升许多。
5.
r
a
f
f
i
c
a
′
s
N
T
R
raffica's NTR
raffica′sNTR:详见
N
T
R
NTR
NTR
H
a
c
k
Hack
Hack:菊花图表现很差。
不过 这篇评论最后还给了我们一些希望:
就是这个优化:
S
L
F
+
s
w
a
p
SLF + swap
SLF+swap:每当队列改变时,如果队首距离大于队尾,则交换首尾。
这个
S
L
F
SLF
SLF 看起来很弱,但却通过了所有
H
a
c
k
Hack
Hack数据。而且,非常难卡。
U
P
D
:
UPD:
UPD:不过这个希望又破灭了
H
a
c
k
e
d
b
y
n
e
g
i
i
z
h
a
a
n
d
Hacked \,\,by \,\,negiizha\,\, and\,\,
Hackedbynegiizhaand钟子谦。
H
a
c
k
Hack
Hack: 与卡 SLF 类似,外挂诱导节点即可。
我枯了 关于
S
P
F
A
SPFA
SPFA,它死了…
好了不说了 我现在就用这个优化去打遍天下了
这篇博客就到这儿了 如果知乎上把
S
L
F
+
s
w
a
p
SLF+swap
SLF+swap
H
a
c
k
Hack
Hack了我会更新的
有问题可以写到下面的评论区 或者加
Q
Q
407694747
QQ407694747
QQ407694747 我们一起讨论
各路神犇各位大佬请多多指教!