首页 > 编程语言 >Johnson 全源最短路算法

Johnson 全源最短路算法

时间:2024-01-22 20:44:07浏览次数:31  
标签:Johnson 全源 节点 算法 负权 短路

Johnson 全源最短路是一种允许带负权边的全源最短路算法。它的主要实现思路即为将原先带负权边的图转化成求一个无负权边的图的全源最短路。

​ 我们定义一个新节点 \(0\),其中 \(0\) 节点与其它各节点连接一条边权为 \(0\) 的边。令 \(h_i\) 为 \(0\) 节点到 \(i\) 节点的最短路。

​ 约定记号 \(E\) 为原图边集,\(E'\) 为新图边集。对于任意 \((u,v,w)\in E\),我们将 \((u, v, w + h[u] - h[v])\) 加入 \(E'\) 中。对 \(E'\) 求解,其中 \(\mathrm{dis}(u,v)=\mathrm{dis'}(u,v)-(h[u]-h[v])\)。

​ 算法正确性是不难而知的。首先,\(h\) 函数满足三角形不等式,即 \(h[u]+w(u,v)\geq h[v]\),推出 \(w + h[u]-h[v] \geq 0\),说明无负权边。其次,对于任意一条从 \(s\) 到 \(t\) 的路径,它的最短路长度为原图最短路长度加上 \(h[s]-h[t]\)。或者,换一种理解方式,\(h\) 函数为节点的势能函数,即可的。

​ 算法瓶颈在无负权图求全源最短路,可以用 Dijkstra 来实现到 \(\mathcal{O}(nm\log n)\)。

标签:Johnson,全源,节点,算法,负权,短路
From: https://www.cnblogs.com/cqbzljh/p/17981037

相关文章

  • C++U6-03-最短路算法4-floyd算法
    B站复习视频:1、https://www.bilibili.com/video/BV1Fj411d71S/?spm_id_from=333.999.0.02、https://www.bilibili.com/video/BV1RK4y1d7ct?p=1&vd_source=5c960e1ede940bc5cab8ed42c8bdc937学习目标 floyd算法Floyd算法是一种用于找到图中所有节点对之间最短路径的动态规划......
  • C++U6-03-最短路算法2-bellmon-ford算法
    学习目标贝尔曼福特算法、SPFA 可以用来复习的B站视频:1、https://www.bilibili.com/video/BV1RK4y1d7ct?p=3&vd_source=5c960e1ede940bc5cab8ed42c8bdc9372、https://www.bilibili.com/video/BV18a4y1A7gv/?spm_id_from=333.999.0.0 SPFA算法是 Bellman-Ford算法 的队......
  • CF-720-E- 最短路+最小生成树
    1051-F题目大意给定一个\(n\)个点\(m\)条边的无向联通图,边带权。有\(q\)次询问,每次询问两点\(x,y\)直接的最短路的长度。Solution注意到\(m-n{\le}20\),那么整个图可以视为一个生成树加上不超过\(21\)条非树边构成的图,这些非树边构成一个边集\(E\)。先把整个图的最小生成树搞......
  • 1.同余最短路
    省选模拟赛T3一小部分用到了同余最短路,发现这简单东西自己从来没学过,补一下。\(n\)个正整数,分别为\(A_1,A_2,\cdots,A_n\),求\([0,V]\)中有多少个数可以被表示为\(\sum\limits_{i=1}^{n}A_ix_i,x_i\in\mathbb{N}\)。可以完全背包,但复杂度\(O(nV)\),当\(V\)很大的时候......
  • C++U6-02-最短路算法1-dijkstra迪杰斯特拉最短路径
    学习目标 最短路径的基本概念  练习1 最短路的定义 本节课迪杰斯特拉dijkstra最短路算法 算法流程:以下是Dijkstra最短路径算法的逐步计算松弛的过程:初始化起始节点的距离为0,其他节点的距离为无穷大。选择当前距离最小且未被访问的节点作为当前节点。......
  • 图论 - 最短路随记
    顺序有点乱,后续会排一下,然后分板块整理All最短路算法的选择:\(n\le100\):Floyd(一般是较难的图论建模)\(n\le4\times10^5\):dijkstra尽量不用SPFA。神秘IDEA:一个带负权图,绝对最短路定义为,绝对值最小的最短路,求\(s\tot\)的绝对最短路。最短路中,任意......
  • 图论总结——最短路
    https://csacademy.com/app/graph_editor/https://riverhamster.gitee.io/app/graph_editor/注:时间复杂度分析中,假设\(n\lem\len^2\)。最短路本质上是一种DP。阶段:点状态:拆点决策:边最优子结构:最短路的任何子路径都一定是最短路。无后效性:正权图中一定可以找到一......
  • 【SPFA】最短路的一种算法
    SPFA算法是在bellman-ford算法基础上优化而来,所以我们先讨论bellman-ford算法bellman-ford算法的核心是‘松弛’。那么什么是松弛呢?以下图为例:假设数组d[i]表示源点s到达结点i的最短路径长度,那么松弛指的就是当d[a]+w<d[b],也就是说,这时候通过a到达b比原来的路径更......
  • P4021 [CTSC2012] 最短路
    [CTSC2012]最短路LuoguP4021题目描述给定一个节点\(1\)和节点\(n\)连通的正权无向图\(G\),请你删除不超过\(k\)条边,使得节点\(1\)和节点\(n\)仍然连通的同时,且这两点之间的最短路尽可能长。提交答案题。Solution模拟赛考到这道,改完这道题我爆了。提交答案题一......
  • Bellman-Ford算法实现带有负权边的单源最短路
    Bellman-Ford算法对于Dijkstra算法,不妨给出这样一个例子graphLRA((A))-->|1|C((C))A-->|2|D((D))D-->|-4|C根据Dijkstra算法的流程,选取A为源点。更新与A邻接的顶点,有C和D。选取已更新顶点中距离A的最小值,显然选择边权为1的边所连接的顶点C,并将C收入最短路集合S中,此......