0-1 BFS

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

算法过程:

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

为什么是对的:

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

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

综上,命题成立

复杂度:

类似 dij,每一个点都仅会被用来拓展一次,故每一条边也仅会被用来拓展一次。而每一次入队操作都只能由一条边造成,故复杂度为 Θ(n+m)

posted @   tybbs  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示