油箱容量只有 B≤100,把「当前驿站 + 剩余电量」看成一层状态,在这张状态图上跑 Dijkstra。
1 格,到 (u,f+1),加时 su(要求 f<B);或走一条耗能 a、耗时 w 的路,到 (v,f−a),要求 f≥a。-1。耗能为 0 的充电(su=0)只会把电量一格格加满,状态数有限,不会死循环。巡检车要从 1 号驿站赶到 C 号驿站。沿线共有 C 个驿站、E 条双向土路。第 i 条路连接 xi 与 yi,走过要消耗 ai 格能量、耗时 wi。
车载电池容量为 B,出发时是满的,电量不能超过 B。在第 j 号驿站可以一格一格充电,每充 1 格耗时 sj。请计算从 1 赶到 C 的最短时间;若怎么走都到不了,输出 -1。
第一行三个整数 C、E、B,表示驿站数、土路数与电池容量(2≤C≤103,1≤E≤104,1≤B≤102)。
第二行 C 个整数 s1,s2,…,sC(0≤sj≤102),表示各驿站充 1 格的耗时。
接下来 E 行,每行四个整数 xi,yi,ai,wi(1≤xi,yi≤C,1≤ai≤102,1≤wi≤103),描述一条双向土路。
输出一个整数:赶到 C 号驿站的最短时间。无法到达时输出 -1。
输入
4 3 5
2 1 9 3
1 2 3 4
2 3 3 5
3 4 2 6
输出
18
说明
出发电量为 5。先走 1→2(耗时 4,剩 2),在 2 号驿站充 3 格(耗时 3),再走 2→3→4(耗时 5+6)。总时间 18。直接在 3 号驿站用单价 9 充电会更慢。
输入
2 1 3
1 1
1 2 4 10
输出
-1
说明
唯一一条路要消耗 4 格,超过容量 3,无法通行。
输入
3 2 4
0 5 1
1 2 2 3
2 3 2 4
输出
7
说明
1 号驿站充电耗时为 0,但出发已经满电,沿 1→2→3 耗时 3+4=7,不必再充。
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册