题目描述:
有 n 棵树,第 i 棵树高 hi 米,一只小鼠初始位于 1 号树 X 高度。现有 m 条航线,表示从 ui 号树飞到 vi 号树需要 ti 秒(是双向边!),飞行过程中它离地面的高度会每秒下降 1 米,小鼠必须保证飞到 vi 号树时不会高于树,也不会低于地面,它可以通过在 ui 号树上以一米每秒的速度向上(向下)奔波完成!现在它需要到 n 号树的最高处,请你求出最短时间,不能到达输出 −1 。 n,m≤105 ; hi,X,ti≤109
输入格式:
第一行包含三个以空格分开的整数 N,M 和 X,意义分别与题目描述中的 N,M 和 X 相同。
接下来 N 行中,第 i(1≤i≤N) 行有一个整数 Hi,表示树木i的高度是 Hi 米。
接下来 M 行中,第 j(1≤j≤M) 行有三个以空格分开的整数 Aj,Bj,Tj (1≤Aj,Bj≤N, Aj=Bj),表示小鼠能花 Tj 秒的时间从 Aj 飞到 Bj 或从 Bj 飞到 Aj。
对于任意 1≤j<k≤M,满足 (Aj,Bj)=(Ak,Bk) 且 (Aj,Bj)=(Bk,Ak)。
输出格式:
输出到标准输出,仅一行一个整数,表示从树木 1 上高度为 X 米处移动到树木 N 顶端所需时间的最小值(单位:秒)。如果不能到达目的地则输出 −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 向上爬 50 米。
- 从树木 1 飞到树木 2。
- 从树木 2 飞到树木 4。
- 从树木 4 飞到树木 5。
- 沿着树木 5 向上爬 10 米。
输入样例 2
2 1 0
1
1
1 2 100
输出样例 2
-1
样例解释 2
小鼠无法从树木 1 飞到树木 2。
输入样例 3
4 3 30
50
10
20
50
1 2 10
2 3 10
3 4 10
输出样例 3
100
数据说明:
全部的输入数据满足:
- 2≤N≤100000
- 1≤M≤300000
- 1≤Hi≤109(1≤i≤N)
- 1≤Tj≤109(1≤j≤M)
- 0≤X≤H1
子任务 1(25 分)
满足以下条件:
- N≤1000
- M≤3000
- Hi≤100(1≤i≤N)
- Tj≤100(1≤j≤M)
子任务 2(25 分)
满足 X=0。
子任务 3(50 分)
没有额外限制。