#gUANGSOUlydlt20x2602. 装满的油箱 Full Tank
装满的油箱 Full Tank
题目描述
有 个城市(编号 )和 条道路,构成一张无向图。
在每个城市里边都有一个加油站,不同的加油站的单位油价不一样。
现在你需要回答不超过 个问题,在每个问题中,请计算出一架油箱容量为 的车子,从起点城市 开到终点城市 至少要花多少油钱?
注意:假定车子初始时油箱是空的。
输入格式
第一行包含两个整数 和 。
第二行包含 个整数,代表 个城市的单位油价,第 个数即为第 个城市的油价 。
接下来 行,每行包括三个整数 ,表示城市 与城市 之间存在道路,且车子从 到 需要消耗的油量为 。
接下来一行包含一个整数 ,代表问题数量。
接下来 行,每行包含三个整数 ,分别表示车子油箱容量 、起点城市 、终点城市 。
输出格式
对于每个问题,输出一个整数,表示所需的最少油钱。
如果无法从起点城市开到终点城市,则输出 impossible。
每个结果占一行。
样例
输入样例:
5 5
10 10 20 12 13
0 1 9
0 2 8
1 2 1
1 3 11
2 3 7
2
10 0 3
20 1 4
输出样例:
170
impossible
样例解释
城市油价:
- 城市0: 10
- 城市1: 10
- 城市2: 20
- 城市3: 12
- 城市4: 13
道路:
- (0,1) 距离 9
- (0,2) 距离 8
- (1,2) 距离 1
- (1,3) 距离 11
- (2,3) 距离 7
问题1:油箱容量 ,起点 ,终点
路径 :
从 0 到 2 距离 8,在 0 加油至少 8 升,油价 10,费用 80
从 2 到 3 距离 7,油箱剩下 0 升,在 2 加油至少 7 升,油价 20,费用 140
总费用 220,不是最优。
更好的路径 :
0→1 距离 9,在 0 加 9 升,费用 90
1→2 距离 1,油箱剩 0 升,在 1 加 1 升,费用 10
2→3 距离 7,油箱剩 0 升,在 2 加 7 升,费用 140
总费用 240,也不是最优。
实际上最优路径 但加油策略不同:
在 0 加满 10 升(因为容量 10),费用 100
开到 2 消耗 8 升,剩 2 升
在 2 加 6 升(补到刚好够到 3),油价 20,费用 120
总费用 220,还是不好。
更优::
在 0 加 9 升到 1,费用 90
在 1 加 1 升到 2,费用 10
在 2 加 7 升到 3,费用 140
总 240,更差。
可能最优是 :
在 0 加 10 升,费用 100
到 2 剩 2 升
在 2 加 8 升(因为从 2 到 3 要 7 升,剩 1 升),费用 160
总 260?不对。
实际上样例输出是 170,说明有更优方案:
:
在 0 加 8 升到 2,费用 80
在 2 加 7 升到 3,费用 140
总 220,不符。
或者 :
在 0 加 9 升到 1,费用 90
在 1 加 8 升(到 2 用 1 升,剩 7 升刚好到 3),费用 80
总 170,符合!
问题2:
城市 4 与其他城市没有道路相连,所以输出 impossible。
数据范围
时空限制
- 时间限制:3 秒
- 空间限制:64 MB