[CF1163F] 删边后的最短路
问题
如何在任删除一条边后求解图中从 到 的最短路?
方法
考虑求出图中的最短路 。
如果待删除的边本身不在最短路上,则不会给结果带来任何影响。如果删除了最短路上的边,需要继续讨论。
考虑一条不经过最短路 某条边的最短路 。这条路线如果和 有交点,就会以 的前缀/后缀作为 的一部分(否则 就不是最短路)。
- 上侧路线 5 直接以 和 作为两端。
- 下侧路线因为经过 ,会和 共享一段前缀和后缀。
路线 一定是一段绕路经过了图中原本不属于 的某条边 (一定得是边)所形成的新路线。如果 分别在 和 处和 接驳,那么 上 到 之间的边无论存在与否都对 没有影响,即, 可以作为删除其中任意一条边后的备选答案之一。区间修改单点查询最小值可以用线段树维护。
最后,还需要保证从 上分叉出去的两条到达 左右顶点的路同样是最短的。这可以通过分别以 和 求最短路得到。
[CF1163F] 删边后的最短路
https://blog.chenc.me/2022/12/20/shortest-path-after-removing-edge/