AT_joi2014ho4 フクロモモンガ (Sugar Glider)

题目描述

有 $ n $ 棵树,第 $ i $ 棵树高 $ h_i $ 米,一只小鼠初始位于 $ 1 $ 号树 $ X $ 高度。现有 $ m $ 条航线,表示从 $ u_i $ 号树飞到 $ v_i $ 号树需要 $ t_i $ 秒(是双向边!),飞行过程中它离地面的高度会每秒下降 $ 1 $ 米,小鼠必须保证飞到 $ v_i $ 号树时不会高于树,也不会低于地面,它可以通过在 $ u_i $ 号树上以一米每秒的速度向上(向下)奔波完成!现在它需要到 $ n $ 号树的最高处,请你求出最短时间,不能到达输出 $ -1 $ 。 $ n,m\le 10^5~;~h_i,X,t_i\le 10^9 $ 接下来 $N$ 行中,第 $i(1\le i\le N)$ 行有一个整数 $H_{i}$,表示树木$i$的高度是 $H_{i}$ 米。 接下来 $M$ 行中,第 $j(1\le j\le M)$ 行有三个以空格分开的整数 $A_{j},B_{j},T_{j}$ $(1\le A_{j}, B_{j}\le N,$ $A_{j}\ne B_{j})$,表示小鼠能花 $T_{j}$ 秒的时间从 $A_{j}$ 飞到 $B_{j}$ 或从 $B_{j}$ 飞到 $A_{j}$。 对于任意 $1\le j < k\le M$,满足 $(A_{j},B_{j})\neq (A_{k},B_{k})$ 且 $(A_{j},B_{j})\neq (B_{k},A_{k})$。

输入格式

標準入力から以下のデータを読み込め. - $ 1 $ 行目には,整数 $ N,\ M,\ X $ が空白を区切りとして書かれている.これは,木の本数が $ N $ 本,移動できる木の組が $ M $ 組あり,最初 JOI 君が木 $ 1 $ の高さ $ X $ メートルの位置にいることを表す. - 続く $ N $ 行のうちの $ i $ 行目 ($ 1\ \leqq\ i\ \leqq\ N $) には,整数 $ H_i $ が書かれている.これは,木 $ i $ の高さが $ H_i $ メートルであることを表す. - 続く $ M $ 行のうちの $ j $ 行目 ($ 1\ \leqq\ j\ \leqq\ M $) には,整数 $ A_j,\ B_j,\ T_j $ ($ 1\ \leqq\ A_j\ \leqq\ N $,$ 1\ \leqq\ B_j\ \leqq\ N $,$ A_j\ \neq\ B_j $) が空白を区切りとして書かれている.これは,木 $ A_j $ と木 $ B_j $ の間を相互に $ T_j $ 秒で飛び移ることができることを表している.また,$ 1\ \leqq\ j\

输出格式

输出到标准输出,仅一行一个整数,表示从树木 $1$ 上高度为 $X$ 米处移动到树木 $N$ 顶端所需时间的最小值(单位:秒)。如果不能到达目的地则输出 $-1$。 ## 样例: ### 输入样例 1 ```plain 5 5 0 50 100 25 30 10 1 2 10 2 5 50 2 4 20 4 3 1 5 4 20 ``` ### 输出样例 1 ```plain 110 ```

说明/提示

下列是其中一种最优解: 1. 沿着树木 $1$ 向上爬 $50$ 米。 1. 从树木 $1$ 飞到树木 $2$。 1. 从树木 $2$ 飞到树木 $4$。 1. 从树木 $4$ 飞到树木 $5$。 1. 沿着树木 $5$ 向上爬 $10$ 米。 ### 输入样例 2 ```plain 2 1 0 1 1 1 2 100 ``` ### 输出样例 2 ```plain -1 ``` ### 样例解释 2 小鼠无法从树木 $1$ 飞到树木 $2$。 ### 输入样例 3 ```plain 4 3 30 50 10 20 50 1 2 10 2 3 10 3 4 10 ``` ### 输出样例 3 ```plain 100 ``` 全部的输入数据满足: - $2\le N\le 100000$ - $1\le M\le 300000$ - $1\le H_{i}\le 10^{9}(1\le i\le N)$ - $1\le T_{j}\le 10^{9}(1\le j\le M)$ - $0\le X\le H_{1}$ #### 子任务 1(25 分) 满足以下条件: - $N\le 1000$ - $M\le 3000$ - $H_{i}\le 100(1\le i\le N)$ - $T_{j}\le 100(1\le j\le M)$ #### 子任务 2(25 分) 满足 $X=0$。 #### 子任务 3(50 分) 没有额外限制。