01-bfs
解决对象
这是一个能够在 \(O(n+m)\) 内优秀复杂度解决只包含 \(0,1\) 边权的最短路处理算法。
实现
就是使用一个双端队列,对于边权为 \(0\) 的点,加入队首;对于边权为 \(1\) 的点,加入队尾。
正确性证明
正确性证明等价于求证 设 \(q_1,q_2,\dots,q_n\) 是双端队列,当前状态一定是 \(d,d,d,d,d,\dots,d+1,d+1,d+1,\dots\)。
证明:
首先,初始状态一定是 \(0\)。
其次,向后推一下可能是 \(0,1\),对于当前一段最小值,当这一段更新完了后,仍然只有两种数。
得证。

浙公网安备 33010602011771号