大多数的做法是这样的,任取某一条 1 到 n 的最短路,记为 1\rightsquigarrow n(令 i\rightsquigarrow j 代表 i 到 j 的最短路,下同)。若边 (i,j) 不在 1\rightsquigarrow n 上,则显然最短路不会改变。所以只考虑 1\rightsquigarrow n 上的边删去的效果。
我们考虑所有边 (i,j),我们求出强制经过这条边 (i,j) 的 1 到 n 的最短路,显然为了最短,是 1\rightsquigarrow i \to j \rightsquigarrow n。
之后,我们考虑某一条 1\rightsquigarrow i \to j \rightsquigarrow n 与 1\rightsquigarrow n 的交集 I,用 \operatorname{len}(1\rightsquigarrow i \to j \rightsquigarrow n) 更新所有 1\rightsquigarrow n 上不属于 I 的边的答案(更新就是取 \min)
这个看上去有一定的道理,我们相当于依次强制最短路走过每条其他的边,然后看这样形成的最短路径避开了 1\rightsquigarrow n 上的哪些边,更新这些边的答案。
取最后一条这样的边,设为 (u,v),首先,这条最短路上 v\rightsquigarrow n 中所有点均属于 S_1,而 S_1\subseteq T_0,v\rightsquigarrow n 中所有点都属于 T_0,这说明 v\rightsquigarrow n 中没有一条边是 (i,j),且长度就是 T 中 v 的距离。
接下来考察 u,我们取 S_0 树上的 1\rightsquigarrow u,它显然至少不长于我们取的这条最短路的 1\to \cdots \to u。所以说 1\rightsquigarrow u\to v \rightsquigarrow n 不长于最短路,所以它与最短路等长。
同时,由于 1\rightsquigarrow u 中每个点都属于 S_0,我们也可以导出它也不包含 (i,j) 且长度就是 S 中 u 的距离。所以 1\rightsquigarrow u\to v \rightsquigarrow n 不长于最短路且满足条件。
综上所述,一定存在一条 (u,v) 满足:
1\rightsquigarrow u\to v \rightsquigarrow n$ 不经过 $(i,j)
也可以做,我们需要稍微修改这个过程,我们首先确定任意一条最短路 1\rightsquigarrow n ,然后在构建 S 的时候,尽可能的将一个节点与 n 的 lca 变高。这样我们发现,如果 2a\leq 0,这导出 a=0,也就是 b=c,此时我们发现,这个新的最短路并没有满足lca最短(有相同长度但lca更高的),所以就可以啦。