观光
方法一:
来证明一下为什么一定可以找到严格次短路
显然最终得到的\(ans\)比\(dis[n]\)大,如果\(ans\)不是严格次短路,那么\(ans\)还比严格次短路大,假设图中严格次短路为下图
那么我们枚举这条路径上面的边的时候,得到的\(temp\)肯定比\(ans\)小。因为\(temp\)是经过这条边的最短路径,而严格次短路也经过这条边,所以严格次短路的长度比\(temp\)大,而\(ans\)大于严格次短路,所以\(temp\)大于\(ans\),那么\(ans\)没有被更新的原因只有可能是\(temp\)等于\(dis[n]\)
我们不妨设我们是依次枚举图中的边的
第一次枚举的是\((1,2)\),有\(temp==dis[n]\),那么就说明存在一条经过\((1,2)\)的最短路如下
这也说明了\(1->2\)是\(1\)到\(2\)的最短路
第二次枚举的是\((2,3)\),有\(temp==dis[n]\),那么就说明存在一条经过\((2,3)\)的最短路如下
注意\(1->2\)是\(1\)到\(2\)的最短路,说明\(1->2->3->5\)是最短路,同时也说明\(1->2->3\)是\(1\)到\(3\)的最短路
第三次枚举的是\((3,4)\),有\(temp==dis[n]\),那么就说明存在一条经过\((3,4)\)的最短路如下
同理说明\(1->2->3->4\)是\(1\)到\(4\)的最短路
然后我们就发现,我们接下来枚举\((4,5)\)这条边,那么\(temp\)就等于路径\(1->2->3->4->5\)的长度,这显然就是次短路的长度,\(ans\)不可能不被更新,所以矛盾,所以不存在这么一条路径
方法二看这篇题解