问题描述:
解题思路:
我们一般会想到先在图上跑一遍最短路,然后在最短路径中找一条最长的边进行缩短。但是很容易可以发现,这种做法是很假的,因为缩短路径可能会使某条非最短路变成最短路。
此时我们需要考虑一种清奇的思路。
构建两张一模一样的图,其中上图 G G G 表示还未使用路径缩短的图,下图 G ′ G' G′ 表示已经使用了路径缩短的图,而上下图连接的单向变表示被路径缩短的边。
如图:

这样一来,由于在路径中必然需要使用一次路径缩短,因此我们必然要从上图的起点到达下图的终点,因此我们可以在这种双层图中跑一遍从 S S S 到 T ′ T' T′ 的最短路,即为问题的解。
通过这种把情况拆开求解的图,我们既保证了路径缩短的使用,也保证了他仅仅只用一次以及答案的最优性。
此解法运用了拆点的思想,把每一条边的边权拆成 w w w 和 w / 2 w/2 w/2 的两种状态进行求解,在很多问题甚至扩展域并查集都有用到。

本文介绍了一种解决特殊最短路径问题的方法——通过构建双层图并利用拆点思想来确保路径缩短仅使用一次且达到最优解。该方法不仅适用于最短路径问题,还能应用于并查集等更广泛的领域。
最低0.47元/天 解锁文章
4万+

被折叠的 条评论
为什么被折叠?



