我们记 W 表示在使用虫洞之前最长的计划的时间,w 表示最长的边,则使用虫洞后的答案至少是 W−w,显然的结论,还是证明一下:
记 f(x) 表示删去长度为 x 的一条边后的答案。
- 如果时间大于 W−x 的计划都经过了这条边,那么删去这条边后答案就等于 W−x。
- 否则答案大于 W−x
所以对于任意的一条长度为 x 的边都有 f(x)≥W−x,那么当 x 取到最大的 w 时 f(x) 取到其下界等于 W−w。
于是我们便可以把二分的左端点从 0 变成 W−w。时间复杂度的 log 从 logW 变成了 logw,大约是从 20 变成了 10,常数小了一倍,然后差不多可以过。