根据 dalao 的建议和洛谷的格式规范优化了下排版
dijkstra 算法正确性证明:
假设有 v0→vi 是 dist中且vi∈/S(S 为已确定最长路径的点的集合)的最大路径,却不是 v0→vi 的最长路径,那么一定存在 vk∈/S 使得 v0→vk→vi 是 v0→vi 的最长路径。
反证法易证乘法计算的最长路径满足 largest(v0→vk→vi)=largest(v0→vk)×largest(vk→vi)
因为 v0→vk 必定要从 S 延申边。不妨认为 vk 是已记录到 dist 中的点。
因为汇率 0<w<=1 ,有 largest(v0→vk),largest(vk→vi)>=1 ,如果为 1 ,不影响最长路径;如果不为 1 一定有 largest(v0→vk)=dist(v0→vk)>dist(v0→vk→vi),与条件矛盾。
因此最长路径一定来自于其他最长路径且 dist 中最长路径就是全局最长路径。