复杂度为 , 关键为 hitting het 的运用. L. Roditty and U. Zwick, Replacement paths and simple shortest paths in unweighted directed graphs.
给定一有向无权图 和起点终点 , 对每条边 , 计算 中 到 的最短路.
(注意: 无向图上的那个经典算法在有向图上是错误的.)
我们先求出一条 到 的最短路, 显然, 我们只需要考察这条路径上每条边被删去的时候的最短路.
对于删去一条边的路径, 考虑将新的最短路和原来的最短路进行比较, 显然我们只需要"离开"原来的最短路一次, 而且形如: 记原来的最短路为 , 那么新的最短路在 处离开, 在 处重新回来, 且 .
考虑设置阈值 , 当 到 的这条外部路径的长度超过或不超过 的时候, 我们分开处理.
短
注意到从 到 的一条外部路径长度一定不小于 , 我们可以一次性处理所有 为同一个值作为起点的 . 从它们开始做多源 最短路的 BFS, 可以在 的时间内得到到每个点的对应的外部路径长度. 如果长度 说明实际上到它最近的 没法走到它. 然后可以在 时间内更新每条边的答案.
这部分复杂度 .
长
随机选一个点, 考虑用经过它的外部路径来更新答案. 只需要做正反图上的 BFS 以及前缀后缀 min 就能 更新.
由于我们考虑的都是 的路径, 所以每条路径有 的概率命中. 随机 次, 就只有 的概率失败. 因此, 总共随机 次, union bound 就保证了有 的概率成功计算出所有答案.
因此, 这部分的代价是 .
清算
综上, 我们在 的时间内解决.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现