時間制限:$2.0sec$ / メモリ制限:$256MB$
ヘビの JOI 君は,ある大きな屋敷に迷い込んでしまった.屋敷の住人に見つかる前に,屋敷を脱出しなければならない.
この屋敷には部屋が $N$ 個あり,$1, 2, ..., N$ の番号が付けられている.また,廊下が $M$ 本あり,$i$ 本目の廊下 $(1 ≦ i ≦ M)$ は部屋 $Ai$ と部屋 $Bi$ を結んでいる.JOI 君はこれらの廊下をどちらの向きにも通ることができ,廊下 $i$ を通るのには $Di$ 分かかる.部屋と部屋の間を廊下を通る以外の手段で移動する方法はない.
この屋敷の部屋の温度はそれぞれ一定に調節されており,JOI 君にとって寒すぎるか,快適であるか,暑すぎるかである.JOI 君は,急な温度変化に対応できないため,最後に寒すぎる部屋を出てから $X$ 分未満のうちに暑すぎる部屋に入ることはできない.同様に,最後に暑すぎる部屋を出てから $X$ 分未満のうちに寒すぎる部屋に入ることもできない.
JOI 君は,移動中に部屋に入るとすぐに部屋から出なければならない.また,廊下の途中で引き返したり,廊下 $i$ を $Di$ 分より長い時間かけて通ることもできない.ただし,一度訪れた部屋にもう一度入ることや,一度使った廊下をもう一度使うことは許される.
JOI 君は現在部屋 $1$ にいる.この部屋は JOI 君にとって寒すぎる.JOI 君は屋敷の出口のある部屋 $N$ に入ると,屋敷から脱出できる.
JOI 君が屋敷から脱出するのにかかる最短の時間を求めよ.
入力は $1 + N + M$ 行からなる.
1 行目には,3 個の整数 $N, M, X (2 ≦ N ≦ 10000, 1 ≦ M ≦ 20000, 1 ≦ X ≦ 200)$ が空白を区切りとして書かれている.これは,屋敷に $N$ 個の部屋と $M$ 本の廊下があり,JOI 君が温度変化に対応するのに $X$ 分かかることを表す.
続く $N$ 行のうちの $i$ 行目 $(1 ≦ i ≦ N)$ には,部屋 $i$ の温度を表す整数 $Ti (0 ≦ Ti ≦ 2)$ が書かれている.JOI 君にとって部屋 $i$ は,$Ti = 0$ のとき寒すぎ,$Ti = 1$ のとき快適であり,$Ti = 2$ のとき暑すぎる.$T1 = 0$ であることが保証されている.
続く $M$ 行のうちの $j$ 行目 $(1 ≦ j ≦ M)$ には,3 個の整数 $Aj, Bj, Dj (1 ≦ Aj < Bj ≦ N, 1 ≦ Dj ≦ 200)$ が空白を区切りとして書かれている.これは,廊下 $j$ が部屋 $Aj$ と部屋 $Bj$ を結んでおり,通るのに $Dj$ 分かかることを表す.同じ部屋の組を結ぶ廊下が複数ある可能性があることに注意せよ.
与えられる入力データでは,JOI 君が屋敷から脱出できることは保証されている.
JOI 君が屋敷から脱出するのに最短で何分かかるかを表す整数を 1 行で出力せよ.
8 10 4
0
1
1
2
1
1
2
0
1 2 1
1 3 1
2 3 3
2 4 5
3 4 1
4 5 1
5 6 1
5 8 1
1 7 2
7 8 2
9
入力例 1 では,部屋を 1 → 2 → 3 → 4 → 5 → 6 → 5 → 8$ の順に移動するのが最短となる.
15 25 4
0
1
1
0
2
1
0
1
1
2
0
0
1
0
1
8 11 1
7 10 1
12 14 1
3 8 1
1 5 1
3 9 1
3 8 1
1 5 1
6 15 1
11 12 1
2 14 1
7 10 1
11 12 1
5 13 1
2 8 1
1 4 1
2 11 1
5 6 1
1 13 1
6 12 1
5 10 1
9 13 1
4 10 1
3 12 1
7 13 1
6
入力例 2 では,いくつかの部屋の組 (たとえば部屋 $1$ と部屋 $5$) を結ぶ廊下が複数ある.
この問題は,グラフ理論の分野の問題である.すなわち,部屋と廊下の構造をグラフとみなしたとき,頂点 1 から頂点 N まで条件を満たしながら移動するときの最短距離を問う問題である.
部屋の温度に関する条件がない場合,この問題はよく知られたアルゴリズムであるダイクストラ法を用いて解くことができる.ここでは,ダイクストラ法を応用してこの問題に適用できるようにすることを考えよう.
ダイクストラ法では,経路を探索する際,始点からの経路長 d とその時点での頂点の番号 v の組を状態として持つ.しかし,この問題では部屋の温度に関する条件があるため,それらの情報だけでは次に使用できる辺集合が定まらない.次に使用できる辺集合は,d, v に加えて以下の情報があれば定まる.
経路上で最後に入った快適でない部屋は暑すぎる部屋であったか,寒すぎる部屋であったかを示すビット b 経路上の最後に入った快適でない部屋と,現在の頂点との (経路に沿った) 距離 d' このうち後者は,値が X 以上である場合は X であるとみなしても次に使用できる辺集合に変化はない.すなわち,d, v, b, min{X, d'} という 4 個の値から次に使用できる辺集合が定まることになる.
以上より,状態として 4 個の値の組 (d, v, b, min{X, d'}) を持ちながらダイクストラ法を行えば条件を満たす最短経路が求まることがわかる.計算量は,2N(X + 1) 頂点 2M(X + 1) 辺のグラフで普通のダイクストラ法を行うのと同等であり,十分高速である.