感觉 E 是错题
没有理解错的话,E 的题意如下:
给 n 个点,m 条边。
有辆车,车只要行驶必须以最大速度运行,从停止到启动需要花费 5s。每条边的花费的时间给定。
每个点有个红绿灯,持续时间分别是 g,y,r,然后循环。如果到这个点时遇到的是绿灯或黄灯,可以直接前进去下一个点;如果到这个点时遇到的是红灯,必须停止等绿灯。
从 s 出发到 e 的最短时间。
大部分 ac 的代码用了很简单的 dijkstra,但按这个题意这题显然没有这么简单。
考虑以下样例:
4 3 0 3 100 100 100 100 100 100 5 5 10 100 100 100 0 1 1 1 2 4 2 3 1 0 0 0 0
所有 ac 的代码返回的答案都是 26s。也就是 0 到 1 花了 6s,1 到 2 花了 4s,等一个 10s 的红绿灯,然后用 5s 启动,然后从 2 到 3 花了 1s,总计 26s。
但这个样例的答案应该是 21s。先从 0 到 1,然后 1 到 0,0 到 1 绕圈圈,直到 16s 的时候才从 1 出发到 2,这时候可以直接卡到 2 的绿灯,不需要等 5s,所以答案是 21s。
因此,我认为按照这个题意,所有的 ac 代码均错误,不确定我对题意的理解是否有误。