边数>>点数时的奇怪dijkstra

skydogli

2020-07-29 17:07:15

Personal

边数>>点数具体指$m\approx n\sqrt{n}$,这时可以把所有的点分成$\sqrt{n}$块,每次更新时$O(1)$更新所在块的最小值,每次取点时暴力遍历所有块找到最小值,并重构被取出的点的块,不难发现这样的时间复杂度在这样的情况下是$O(n\sqrt n)$,如果在平时使用则是$O(n\sqrt{n}+m)$,通常不会比正常的$O(m\log n)$优。