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

View as PDF

Submit solution

Points: 5
Time limit: 2.0s
Memory limit: 256M

Problem types
Allowed languages
Assembly, Awk, C, C++, Java, Pascal, Perl, Python, Sed, Text

フクロモモンガの JOI 君が住んでいる森にはユーカリの木が N 本生えており,それらの木には 1 から Nの番号がついている.木 i の高さは Hi メートルである.</p>

JOI 君が相互に直接飛び移ることのできる木の組が M 組あり,各組の木の間を飛び移るためにかかる時間が定まっている.JOI 君が木の間を飛び移っている間は,地面からの高さが 1 秒あたり 1 メートル下がる.すなわち,JOI 君の現在の地面からの高さが h メートル,木の間を飛び移るためにかかる時間が t 秒であるとき,飛び移った後の地面からの高さは h − t メートルとなる.ただし,h − t が 0 よりも小さくなる場合や行き先の木の高さよりも大きくなる場合は飛び移ることができない.

さらに,JOI 君は木の側面を上下に移動することによって,地面からの高さを 0 メートルから今いる木の高さの範囲で増減させることができる.JOI 君が地面からの高さを 1 メートル増加または減少させるためには 1 秒の時間がかかる.

JOI 君は,木 1 の高さ X メートルの位置から木 N の頂上 (高さ HN メートルの位置) に行こうとしており,そのためにかかる時間の最小値を知りたい.

各木の高さと,JOI 君が直接飛び移ることができる木の組の情報と,最初 JOI 君がいる場所の高さが与えられる.木 N の頂上に行くためにかかる時間の最小値を求めるプログラムを作成せよ.

입력 형식

標準入力から以下のデータを読み込め.</p>

  • 1 行目には,整数 N, M, X が空白を区切りとして書かれている.これは,木の本数が N 本,移動できる木の組が M 組あり,最初 JOI 君が木 1 の高さ X メートルの位置にいることを表す.
  • 続く N 行のうちの i 行目 (1 ≤ i ≤ N) には,整数 Hi が書かれている.これは,木 i の高さが Hi メートルであることを表す.
  • 続く M 行のうちの j 行目 (1 ≤ j ≤ M) には,整数 Aj, Bj, Tj (1 ≤ Aj ≤ N, 1 ≤ Bj ≤ N, Aj ≠ Bj) が空白を区切りとして書かれている.これは,木 Aj と木 Bj の間を相互に Tj 秒で飛び移ることができることを表している.また,1 ≤ j < k ≤ M ならば,(Aj, Bj) ≠ (Ak, Bk) および (Aj, Bj) ≠ (Bk, Ak) を満たす.
## 출력 형식

標準出力に,木 1 の高さ X メートルの位置から木 N の頂上に行くためにかかる時間の最小値を秒単位で表す整数を 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

예제 입력 2

2 1 0
1
1
1 2 100

예제 출력 2

-1

예제 입력 3

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

예제 출력 3

100

Comments

There are no comments at the moment.