0-1 BFS

发布时间 2023-09-21 22:08:18作者: tybbs

前言:做这道题发现dij过不了,意识到自己不会0-1 BFS,遂查,发现网上的解释很多都不清楚,oi wiki 好像没讲,自己证明了一下。

算法过程:

用于求边权为 \(0\)\(1\) 的图的最短路。方法就是把 dij 的单调队列换成一个 deque,每次更新如果用边权为 \(0\) 的边,把新的点放到队首,反之放到队尾,复杂度显然 \(\Theta (n+m)\)

为什么是对的:

根据 dij 的正确性证明,只需证 deque 内的点的 \(dis\) 单调不增。
下证明 deque 内的数的 \(dis\) 事实上形如 \(d,d,...d,d+1,d+1,...,d+1\)

  1. 初始时,deque 内的数的 \(dis\)\([0]\),符合要求
  2. 每次拓展时取链头 \(u\)\(dis_u=d\) 故当更新到边权为 \(0\)\(dis_v=d\),放在队头,满足性质,否则 \(dis_v=d+1\),放在队尾,仍满足性质。

综上,命题成立