CC's

Back

问题#

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

方法#

考虑求出图中的最短路 PP。

一张图及其最短路

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

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

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

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

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

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

[CF1163F] 删边后的最短路
https://astro-pure.js.org/blog/shortest-path-after-removing-edge
Author Cheng Chen
Published at 2022年12月20日
Comment seems to stuck. Try to refresh?✨