#joi2014ho4. [joi2014ho4]フクロモモンガ (Sugar Glider)

[joi2014ho4]フクロモモンガ (Sugar Glider)

题目描述:

n n 棵树,第 i i 棵树高 hi h_i 米,一只小鼠初始位于 1 1 号树 X X 高度。现有 m m 条航线,表示从 ui u_i 号树飞到 vi v_i 号树需要 ti t_i 秒(是双向边!),飞行过程中它离地面的高度会每秒下降 1 1 米,小鼠必须保证飞到 vi v_i 号树时不会高于树,也不会低于地面,它可以通过在 ui u_i 号树上以一米每秒的速度向上(向下)奔波完成!现在它需要到 n n 号树的最高处,请你求出最短时间,不能到达输出 1 -1 n,m105 ; hi,X,ti109 n,m\le 10^5~;~h_i,X,t_i\le 10^9

输入格式:

第一行包含三个以空格分开的整数 N,MN, MXX,意义分别与题目描述中的 N,MN, MXX 相同。

接下来 NN 行中,第 i(1iN)i(1\le i\le N) 行有一个整数 HiH_{i},表示树木ii的高度是 HiH_{i} 米。

接下来 MM 行中,第 j(1jM)j(1\le j\le M) 行有三个以空格分开的整数 Aj,Bj,TjA_{j},B_{j},T_{j} (1Aj,BjN,(1\le A_{j}, B_{j}\le N, AjBj)A_{j}\ne B_{j}),表示小鼠能花 TjT_{j} 秒的时间从 AjA_{j} 飞到 BjB_{j} 或从 BjB_{j} 飞到 AjA_{j}

对于任意 1j<kM1\le j < k\le M,满足 (Aj,Bj)(Ak,Bk)(A_{j},B_{j})\neq (A_{k},B_{k})(Aj,Bj)(Bk,Ak)(A_{j},B_{j})\neq (B_{k},A_{k})

输出格式:

输出到标准输出,仅一行一个整数,表示从树木 11 上高度为 XX 米处移动到树木 NN 顶端所需时间的最小值(单位:秒)。如果不能到达目的地则输出 1-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

输出样例 1

110

样例说明 1

下列是其中一种最优解:

  1. 沿着树木 11 向上爬 5050 米。
  2. 从树木 11 飞到树木 22
  3. 从树木 22 飞到树木 44
  4. 从树木 44 飞到树木 55
  5. 沿着树木 55 向上爬 1010 米。

输入样例 2

2 1 0
1
1
1 2 100

输出样例 2

-1

样例解释 2

小鼠无法从树木 11 飞到树木 22

输入样例 3

4 3 30
50
10
20
50
1 2 10
2 3 10
3 4 10

输出样例 3

100

数据说明:

全部的输入数据满足:

  • 2N1000002\le N\le 100000
  • 1M3000001\le M\le 300000
  • 1Hi109(1iN)1\le H_{i}\le 10^{9}(1\le i\le N)
  • 1Tj109(1jM)1\le T_{j}\le 10^{9}(1\le j\le M)
  • 0XH10\le X\le H_{1}

子任务 1(25 分)

满足以下条件:

  • N1000N\le 1000
  • M3000M\le 3000
  • Hi100(1iN)H_{i}\le 100(1\le i\le N)
  • Tj100(1jM)T_{j}\le 100(1\le j\le M)

子任务 2(25 分)

满足 X=0X=0

子任务 3(50 分)

没有额外限制。