为什么一定要开vis数组?

P4779 【模板】单源最短路径(标准版)

gf202276 @ 2024-10-07 15:56:37

为什么要开vis数组?如果dis[v]>dis[u}+w,那就应该要使用来更新,如果已经vis过了就不可能进判断了呀?


by Gaoxing233 @ 2024-10-07 16:01:47

因为如果在之前满足了dis[v]>dis[u]+w,那么这个不是路径最短的点迟早会被队列弹出来,但此时dis[v]已经被更新,所以如果不开vis数组会导致重复遍历


by Gaoxing233 @ 2024-10-07 16:07:14

@gf202276


by gf202276 @ 2024-10-07 16:32:13

好,非常感谢(但这会让复杂度退化成什么样?)


by lby_commandBlock @ 2024-10-20 14:23:54

@gf202276 O(\infin)


|