本题求最长路径正确性证明
  • 板块P1576 最小花费
  • 楼主AK47are
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/12/10 14:54
  • 上次更新2024/12/10 20:23:03
查看原帖
本题求最长路径正确性证明
1544265
AK47are楼主2024/12/10 14:54

根据 dalao 的建议和洛谷的格式规范优化了下排版

dijkstra 算法正确性证明:

假设有 v0→viv_0 \to v_i 是 dist⁡中且vi∉S\operatorname{dist} 中且 v_i \notin S(SS 为已确定最长路径的点的集合)的最大路径,却不是 v0→viv_0 \to v_i 的最长路径,那么一定存在 vk∉Sv_k \notin S 使得 v0→vk→viv_0 \to v_k \to v_i 是 v0→viv_0 \to v_i 的最长路径。

反证法易证乘法计算的最长路径满足 largest(v0→vk→vi)⁡=largest(v0→vk)⁡×largest(vk→vi)⁡\operatorname{largest(v_0 \to v_k \to v_i)} = \operatorname{largest(v_0 \to v_k)} \times \operatorname{largest(v_k \to v_i)}

因为 v0→vkv_0 \to v_k 必定要从 SS 延申边。不妨认为 vkv_k 是已记录到 dist⁡\operatorname{dist} 中的点。

因为汇率 0<w<=10 < w <= 1 ,有 largest(v0→vk)⁡,largest(vk→vi)>=1⁡\operatorname{largest(v_0 \to v_k)}, \operatorname{largest(v_k \to v_i) >= 1} ,如果为 1 ,不影响最长路径;如果不为 1 一定有 largest(v0→vk)⁡=dist(v0→vk)⁡>dist(v0→vk→vi)⁡\operatorname{largest(v_0 \to v_k)} = \operatorname{dist(v_0 \to v_k)} > \operatorname{dist(v_0 \to v_k \to v_i)},与条件矛盾。

因此最长路径一定来自于其他最长路径且 dist⁡\operatorname{dist} 中最长路径就是全局最长路径。

2024/12/10 14:54
加载中...