P6961 [NEERC2017]Journey from Petersburg to Moscow
试着将现存这篇题解的做法讲得更清楚些。
尝试枚举每一条边,钦定其为答案路径上的第
考察这个答案和实际答案的关系。
-
若
w_0 正好等于当前某条最短路上的第k 大边权,则当前答案大于等于实际答案; -
若
w_0 大于当前某条最短路上的第k 大边权,则当前答案还是大于等于实际答案。这是因为:在当前最短路上,存在若干条边(可以是0 条)本应贡献的小于w_0 的边权被放大成了w_0 ; -
若
w_0 小于当前某条最短路上的第k 大边权,则当前答案同样大于等于实际答案。这是因为:在当前最短路上,存在若干条边(可以是0 条)本不应对最短路长度贡献却实际上产生了贡献。
由此可见,每次钦定出来的答案都是大于等于实际答案的。
还可以看到,只要存在一条答案路径边数不小于
不过还要注意一个事实:有可能所有的答案路径边数都不足
当所有的答案路径边数都不足
易见,在不是这种情况时,原图最短路一定不短于实际答案。
实现时,我们只需要把所有钦定答案和直接在原图上跑出来的最短路取最小值,即可一定得到正确答案。
这道题的难点在于想到枚举一条边钦定其边权为路径上第