NIKKEI Programming Contest 2019-2 Task D. Shortest Path on a Line

Observations


1N 的最短路一定是不走回头路的。所谓走回头路是指从序号大的点走到序号小的点。

证明:首先,任意从 1N 的路径的最后一步一定不是回头路。假设存在一条从 1N 的最短路走了回头路,并设这条路最后一次回头是从 uv 且从 v 开始直到终点经过的点依次是 v=v0,v1,vk=N。我们有 v<u<Nv=v0<v1<v2<<vk=Nviu。设 vi<uvi+1>u 则必然存在边 (u,vi+1) 和边 (vi,vi+1) 长度相等,因此走 u,vi+1,,vk 更优。矛盾!

为了便于描述,以下用 (u,v,C) 表示连接 u,v,长为 C 的无向边,用 (uv,C) 表示从 uv 长为 c 的有向边。

从上述证明可以得出推论:将原无向图按下述方式改造成有向图,从 1N 的最短路长度不变:
以下设 1u<vN。将原图中的无向边 (u,v,C) 删除,加入有向边 (uv,C)
再任意加入长度非负的回头边。

考虑上述有向图的一种特殊情形:对于 i=i,2,,N,加上长度为 0 的回头边 (ii1,0)
注意到此时对于一组有向边 (st,Ci)Lis<tRi,只保留 (LiRi,Ci) 仍能保持从 1N 的最短路长度不变。

posted @   Pat  阅读(423)  评论(5编辑  收藏  举报
编辑推荐:
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
阅读排行:
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
点击右上角即可分享
微信分享提示