#YHSP1011. 燃油补给

燃油补给

题目:沙漠越野赛燃油补给问题

题目描述

一场精彩的沙漠越野赛即将在广袤沙漠中举行。沙漠中分布着 NN 个补给站(编号 11 至 NN ),这些补给站通过 MM 条沙漠公路相连,公路为双向通行。其中第 ii 条公路连接补给站 UiU_i 和 ViV_i ,路程为 CiC_i 公里。

参赛选手驾驶的越野车油箱容量为 LL 升,行驶 11 公里消耗 11 升燃油。当探险队抵达某个补给站时,可选择:

  1. 在补给站将油箱加满。
  2. 不加油,直接前往下一个补给站。

现有 QQ 个赛程,每个赛程指定从补给站 SjS_j 出发前往目标补给站 TjT_j 。若选手在行驶过程中燃油耗尽,当前赛程挑战失败(不影响后续赛程)并退出比赛。选手从出发补给站出发时,油箱已加满。

需计算对于每个赛程,选手若要挑战成功,从补给站 SjS_j 到 TjT_j 中途至少需补充燃油的次数(不含出发时加满的一箱油) 。若无论如何都无法抵达目的地,则输出 −1-1 。

输入格式

  1. 第一行:三个整数 NN、MM、LL ,分别表示补给站数量、公路数量、油箱容量。
  2. 接下来 MM 行:每行三个整数 UiU_i、ViV_i、CiC_i ,表示公路连接的两个补给站及公路长度。
  3. 下一行:整数 QQ ,表示赛程数量。
  4. 接下来 QQ 行:每行两个整数 SjS_j、TjT_j ,表示每个赛程的出发补给站和目标补给站。

输出格式

输出 QQ 行,每行一个整数。第 jj 行数字表示从补给站 SjS_j 到 TjT_j 赛程中,选手至少需补给燃油的次数;若无法抵达则输出 −1-1 。

样例

  • 样例 1 输入
3 2 5
1 2 3
2 3 3
2
1 3
3 2
  • 样例 1 输出
1
0
  • 样例 1 说明
    • 沙漠有 33 个补给站,22 条公路:公路 11 连接补给站 11 与 22 ,长 33 公里;公路 22 连接补给站 22 与 33 ,长 33 公里。越野车油箱容量 55 升,每公里耗油 11 升,出发时油箱加满。
    • 从补给站 33 到 22 的赛程:选手可直接从补给站 33 驶向补给站 22 ,耗油 33 升,油箱剩余 22 升,中途无需补给,输出 00 。
    • 从补给站 11 到 33 的赛程:选手先从补给站 11 驶向补给站 22 耗油 33 升,此时油箱剩 22 升,而前往补给站 33 还需 33 升油,所以需在补给站 22 补给一次将油箱加满才能继续行驶,输出 11 。

数据范围

对于 100%100\% 的数据,满足 2≤N≤3002 \leq N \leq 300,0≤M≤N(N−1)20 \leq M \leq \frac{N(N - 1)}{2},1≤L≤1091 \leq L \leq 10^9,1≤Ui,Vi≤N1 \leq U_i, V_i \leq N 且 Ui≠ViU_i \neq V_i (每对 Ui,ViU_i, V_i 不重复,即无重边),1≤Ci≤1091 \leq C_i \leq 10^9,1≤Q≤N(N−1)1 \leq Q \leq N(N - 1),1≤Sj,Tj≤N1 \leq S_j, T_j \leq N 且 Sj≠TjS_j \neq T_j 。