双层dijkstra算法解释:对于一个图,我已经知道了所有点的点和边,然后我对于某一条边进行修改,如我可以添加一条边,或者修改边的长度。然后依然问你最短路的长度。这时候你就可以把这个图当作两个,然后这两个图用一条你修改或者添加的边进行连接。
就比如对于有n个点m条边的简单无向图,我从u-v,我先以u为起点,通过dijskra算法跑一边这个图,求出该点到其他所有点的最短距离;同理以v为起点跑一边,也是求出以该点为起点到所有点的最短距离。之后我添加或者修改一条边l(x,y),然后我就取d(u,x)+d(v,y)与d(u,y)+d(v,x)中最短的那个,加上l,与原来的没添加过的路径长度比比,之后迭代更新就行。
就像这样。
相关题目:
https://blog.csdn.net/qq_43653717/article/details/105291549
拓展(个人思考,不一定对):而对于修改或者添加两条边,我可以搞成3层的形式,但是这样复杂度会大大的提高。
你需要先求出所有点的dijskra,然后列车所有的成对边。。。