赞
踩
最短路板子
首先,我们可以考虑给它暴力建图来找最短路,但由于向上走的话,每个在它上面的点都可以被走到 ,所以我们的边数可能会达到 n 4 n^4 n4级别,明显是不行的。
于是,我们得想一些方法来缩小它的边数。
从点 i i i向上走到点 j j j的花费是 i − j + 1 i-j+1 i−j+1,关键是这个 + 1 +1 +1很难弄。
我们可以借鉴一些我们网络流分块的建图方法,虽然并不需要分块, 对于每一个点建一个虚点,点 i i i到虚点 i ′ i' i′的长度为 1 1 1,再从 i ′ i' i′依次向 ( i − 1 ) ′ (i-1)' (i−1)′连一条为 1 1 1的边,最后再从 i ′ i' i′向 i i i连一条为0的边。
其余的边,直接连就可以了。
这样,就可以边数达到 n 2 n^2 n2的级别了,点数也是 n 2 n^2 n2级别的。
然后,就是最短路。
当笔者兴致满满地打了一个spfa时,却被卡死了 ,这年头还有人卡SPFA的 。

当然,换上堆优化的dij就可以过了。
Devil巨佬对spfa加上优化也过了。
时间复杂度 O ( n 2 l o g n ) O\left(n^2log\,n\right) O(n2logn
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。