被战神的 std 虐爆了。。。。。耀爷所谓搞笑 slf 优化,竟然有如此大的作用。
什么是 slf 优化呢?其实就是新扩展的节点在入队时如果其 dis 值小于队首则插入到队首否则插入到队尾。
我也不知道为什么可以有很大的优化,也许令更优的节点先扩展吧。但是效率的对比可能就比较惊人了,一个裸跑 0.8 s 的点竟然跑进了 0.05 s。
Code :
bool spfa(int k)
{
if (f[uu] > k) return 0;
memset(dis, 100, sizeof dis), q[uu] = dis[uu] = 0;
for (h = t = uu; h; vst[h] = 0, h = q[h])
if (dis[h] < dis[vv])
for (int e = edge[h]; e; e = next[e])
{
int & v = to[e];
if (f[v] <= k && dis[h] + c[e] < dis[v])
{
dis[v] = dis[h] + c[e], pre[v] = h;
if (! vst[v])
if (vst[v] = 1, h != t && dis[v] <= dis[q[h]]) q[v] = q[h], q[h] = v;
else q[v] = 0, t = q[t] = v;
}
}
return dis[vv] < s;
}

7886

被折叠的 条评论
为什么被折叠?



