[CF1163F] 删边后的最短路

问题

如何在任删除一条边后求解图中从 SSTT 的最短路?

方法

考虑求出图中的最短路 PP

一张图及其最短路

如果待删除的边本身不在最短路上,则不会给结果带来任何影响。如果删除了最短路上的边,需要继续讨论。

考虑一条不经过最短路 PP 某条边的最短路 PP'。这条路线如果和 PP 有交点,就会以 PP 的前缀/后缀作为 PP' 的一部分(否则 PP 就不是最短路)。

  • 上侧路线 5 直接以 SSTT 作为两端。
  • 下侧路线因为经过 PP,会和 PP 共享一段前缀和后缀。

当删除 2-3 或 3-4 后的一种新路线

路线 PP' 一定是一段绕路经过了图中原本不属于 PP 的某条边 EE(一定得是边)所形成的新路线。如果 PP' 分别在 LLRR 处和 PP 接驳,那么 PPLLRR 之间的边无论存在与否都对 PP' 没有影响,即,PP' 可以作为删除其中任意一条边后的备选答案之一。区间修改单点查询最小值可以用线段树维护。

最后,还需要保证从 PP 上分叉出去的两条到达 EE 左右顶点的路同样是最短的。这可以通过分别以 SSTT 求最短路得到。


[CF1163F] 删边后的最短路
https://blog.chenc.me/2022/12/20/shortest-path-after-removing-edge/
作者
CC
发布于
2022年12月20日
许可协议