#P15814. [JOI 2014 Final] フクロモモンガ

[JOI 2014 Final] フクロモモンガ

说明

袋熊 JOI 君居住的森林里有 NN 棵桉树,这些树被编号为 11NN。树 ii 的高度是 HiH_i 米。

MM 对树,JOI 君可以直接在它们之间跳跃,并且在每对树之间跳跃所需的时间是固定的。JOI 君在树间跳跃时,离地高度会以每秒 11 米的速度下降。也就是说,如果 JOI 君当前的离地高度是 hh 米,在两棵树之间跳跃需要 tt 秒,那么跳跃后的离地高度将是 hth - t 米。但是,如果 hth - t 小于 00 或者大于目标树的高度,则无法进行这次跳跃。

此外,JOI 君可以通过在树的侧面上下移动,在 00 米到当前所在树的高度范围内调整自己的离地高度。JOI 君将离地高度增加或减少 11 米需要 11 秒时间。

JOI 君想要从树 11 上离地 XX 米高的位置,前往树 NN 的顶端(离地 HNH_N 米高的位置),他想要知道完成这个目标所需的最短时间。

任务

给定每棵树的高度、JOI 君可以直接跳跃的树对信息以及 JOI 君的初始位置高度。编写程序,求出到达树 NN 顶端所需的最短时间。

输入格式

从标准输入读取以下数据。

  • 第 1 行包含以空格分隔的整数 N,M,XN, M, X。表示有 NN 棵树,MM 对可以跳跃的树,初始时 JOI 君位于树 11 上离地 XX 米高的位置。
  • 接下来的 NN 行中,第 ii 行 (1iN1 \le i \le N) 包含一个整数 HiH_i。表示树 ii 的高度为 HiH_i 米。
  • 接下来的 MM 行中,第 jj 行 (1jM1 \le j \le M) 包含以空格分隔的整数 Aj,Bj,TjA_j, B_j, T_j (1AjN1 \le A_j \le N, 1BjN1 \le B_j \le N, AjBjA_j \ne B_j)。表示可以在树 AjA_j 和树 BjB_j 之间相互跳跃,所需时间为 TjT_j 秒。此外,对于 1j<kM1 \le j < k \le M,满足 (Aj,Bj)(Ak,Bk)(A_j, B_j) \ne (A_k, B_k)(Aj,Bj)(Bk,Ak)(A_j, B_j) \ne (B_k, A_k)

输出格式

向标准输出输出一行,包含一个整数,表示从树 11 上离地 XX 米高的位置到达树 NN 顶端所需的最短时间(单位:秒)。如果无法到达,则输出 1-1

5 5 0
50
100
25
30
10
1 2 10
2 5 50
2 4 20
4 3 1
5 4 20
110
2 1 0
1
1
1 2 100
-1
4 3 30
50
10
20
50
1 2 10
2 3 10
3 4 10
100

提示

样例解释 1

例如,可以按照以下方式移动:

  1. 在树 1 上向上爬 5050 米。
  2. 从树 1 跳跃到树 2。
  3. 从树 2 跳跃到树 4。
  4. 从树 4 跳跃到树 5。
  5. 在树 5 上向上爬 1010 米。

样例解释 2

JOI 君无法从树 1 跳跃到树 2。

数据范围

所有输入数据满足以下条件。

  • 2N1000002 \le N \le 100000
  • 1M3000001 \le M \le 300000
  • 1Hi10000000001 \le H_i \le 1000000000 (1iN1 \le i \le N)
  • 1Tj10000000001 \le T_j \le 1000000000 (1jM1 \le j \le M)
  • 0XH10 \le X \le H_1

子任务

子任务 1 [25 分]

满足以下条件。

  • N1000N \le 1000
  • M3000M \le 3000
  • Hi100H_i \le 100 (1iN1 \le i \le N)
  • Tj100T_j \le 100 (1jM1 \le j \le M)

子任务 2 [25 分]

满足以下条件。

  • X=0X = 0

子任务 3 [50 分]

没有额外限制。


翻译由 DeepSeek V3.2 完成