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\),对于当前一段最小值,当这一段更新完了后,仍然只有两种数。

得证。

posted @ 2024-11-06 16:27  tyccyt  阅读(45)  评论(0)    收藏  举报