(读本文前需知dijkstra求最短路算法)
目录
目标:
本题是求1到n的最短路
难点:
本题的路径长度(即权值)是距离*自行车slowness
这就使得最短路很难求,比如第一个样例,就是绕到城市3选到slowness最小的自行车然后去终点最小
本题方法:
用ans[ i ]来表示城市 i 到终点n的最小长度 (很巧妙,看后面的变换去理解原因吧)
那么ans[1]就是答案
重点就是这个ans的变换了
从slowness最小的城市开始顺序dijkstra(可以求得该点到所有点的最短路)(多重dijkstra),这也包括到终点n的最短路
(为什么从slowness最小的城市开始呢,是贪心,我不好证明,,举个小反例:3经过4,ans[3]先于ans[4]算好了,但是3其实经过4可以有更短的(这需要4的slowness更小),此时ans[3]是错的
(slowness和城市下标捆绑排序(用个结构体,写个重载<就可以))
最短路求完进行这些操作: