有向无权图删边最短路 (Roditty, Zwick, 2005)

给定一有向无权图 G 和起点终点 s,t, 对每条边 e, 计算 G{e}st 的最短路.

(注意: 无向图上的那个经典算法在有向图上是错误的.)

我们先求出一条 st 的最短路, 显然, 我们只需要考察这条路径上每条边被删去的时候的最短路.

对于删去一条边的路径, 考虑将新的最短路和原来的最短路进行比较, 显然我们只需要"离开"原来的最短路一次, 而且形如: 记原来的最短路为 p1,,pk, 那么新的最短路在 pi 处离开, 在 pj 处重新回来, 且 i<j.

考虑设置阈值 L, 当 pipj 的这条外部路径的长度超过或不超过 L 的时候, 我们分开处理.

注意到从 pipj 的一条外部路径长度一定不小于 ji, 我们可以一次性处理所有 imod(L+1) 为同一个值作为起点的 i. 从它们开始做多源 最短路的 BFS, 可以在 O(m) 的时间内得到到每个点的对应的外部路径长度. 如果长度 >L 说明实际上到它最近的 i 没法走到它. 然后可以在 O(n) 时间内更新每条边的答案.

这部分复杂度 O(mL).

随机选一个点, 考虑用经过它的外部路径来更新答案. 只需要做正反图上的 BFS 以及前缀后缀 min 就能 O(m) 更新.

由于我们考虑的都是 >L 的路径, 所以每条路径有 L/n 的概率命中. 随机 n/L 次, 就只有 (1L/n)n/L1/e 的概率失败. 因此, 总共随机 klnnn/L 次, union bound 就保证了有 11nk1 的概率成功计算出所有答案.

因此, 这部分的代价是 O(mn/Llogn).

清算

综上, 我们在 O(mnlogn) 的时间内解决.

posted @   EntropyIncreaser  阅读(2521)  评论(4编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示