一步一步来
1.假设D为1,你要怎么求?
每个点乘地铁的时间是唯一的,也就是说,如果我一开始先走一段路到A点再坐地铁,等价于我直接坐地铁到A点,下地铁的瞬间再次上车。
所以最优路径一定可以是先从起点乘地铁到某个点,然后再一直走路到终点
因此我们可以遍历 \(S\) 的每个点,求出在该点下车的最短时间
由于求多条最短路,所以我们改变建边的方向,求单源最短路
时间复杂度 \(O(m+n)\)
2.由于D的范围很大,我们没法每天遍历一遍S,发现交换只会影响两个点的下车的最短时间
所以我们可以用堆维护所有点下车的最短时间,只有堆顶元素处于它这一天应该在的位置上时有效
code
标签:下车,P9026,Daily,S4,地铁,Commute,CCC2021
From: https://www.cnblogs.com/pure4knowledge/p/18220975