問題一覧 > 通常問題

No.1 道のショートカット

レベル : / 実行時間制限 : 1ケース 5.000秒 / メモリ制限 : 512 MB / 標準ジャッジ問題
タグ : / 解いたユーザー数 513
作問者 : yuki2006
19 ProblemId : 17 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2022-07-20 03:41:06

問題文

NN個の町があります。それぞれ1N1 \ldots Nと番号がふられています。
それぞれの街は直接、道でつながっているものもあれば、つながってないものがあります。
それぞれの道は 町SiS_iから町TiT_iに行くのに YiY_i円がかかり、MiM_i 単位時間 かかります。

あなたは 11 の町にいます。
NN の都市に行きたいと思っています。
何個道や町を経由してもいいですが、あなたは今CC円しか持っていません。

(つまり、通った道のコスト YiYi の合計をCC以下にしないといけない。)

その中で一番早く着く道を選べた時、合計の単位時間を答えてください。
この制約の中で辿りつけない場合 1-1を返してください。

入力

NN
CC
VV
S1 S2 S3  SVS_1\ S_2\ S_3\ \dots\ S_V
T1 T2 T3  TVT_1\ T_2\ T_3\ \dots\ T_V
Y1 Y2 Y3  YVY_1\ Y_2\ Y_3\ \dots\ Y_V
M1 M2 M3  MVM_1\ M_2\ M_3\ \dots\ M_V

11行目に、町の数を表す整数 N (2N50) N\ ( 2 \leq N \leq 50 ) が与えられる。
22行目に、手持ちのお金を表す整数 C (1C300) C\ ( 1 \leq C \leq 300 ) が与えられる。
33行目に、道の数を表す整数 V (1V1500) V\ ( 1 \leq V \leq 1500 ) が与えられる。
44行目に、Si (1SiN)S_i\ ( 1 \leq S_i \leq N ) VV個スペース区切りで与えられる。
55行目に、Ti (Si<TiN)T_i\ ( S_i \lt T_i \leq N ) VV個スペース区切りで与えられる。
66行目に、Yi (1YiC)Y_i\ ( 1 \leq Y_i \leq C ) VV個スペース区切りで与えられる。
77行目に、Mi (1Mi1000)M_i\ ( 1 \leq M_i \leq 1000 ) VV個スペース区切りで与えられる。

Si,Ti,Yi,MiS_i, T_i, Y_i, M_i は それぞれ ii インデックス で町 SiS_i \rightarrowTiT_i (有向グラフ)の移動に コストYiY_i がかかり、MiM_i 単位時間かかるという意味です。

町どうしを道でつないだ後にできるグラフは閉路(ループ)がないとし、番号的には Si<TiS_i \lt T_iとなっているとする。
つまり、番号的に戻る経路(例えば町33から町11など)へは考えなくてもよい。
道の接続的に町NNに辿りつけない場合もあります。
SiTiS_i \rightarrow T_iへの経路が複数ある場合があります。

出力

11の町からNNの町へ行く一番早く着く道を選べた時、合計の単位時間を答えてください。
この制約の中で辿りつけない場合 -1を返してください。
最後に改行してください。

サンプル

サンプル1
入力
3
100
3
1 2 1
2 3 3
10 90 10
10 10 50
出力
20

131 \rightarrow 3 と行くと コスト1010だが、単位時間が5050掛かる。
1231 \rightarrow 2 \rightarrow 3 と行くと 一文無しになるが、 2020単位時間と早いのでこちらを選択する。

サンプル2
入力
3
100
3
1 2 1
2 3 3
1 100 10
10 10 50
出力
50

1231 \rightarrow 2 \rightarrow 3 と行くと 時間は2020と短いが、コスト101101かかるため選択できない。

サンプル3
入力
10
10
19
1 1 2 4 5 1 3 4 6 4 6 4 5 7 8 2 3 4 9
3 5 5 5 6 7 7 7 7 8 8 9 9 9 9 10 10 10 10
8 6 8 7 6 6 9 9 7 6 9 7 7 8 7 6 6 8 6
8 9 10 4 10 3 5 9 3 4 1 8 3 1 3 6 6 10 4
出力
-1

サンプル4
入力
2
1
2
1 1
2 2
1 2
100 10
出力
100

多重辺があることにも気をつけてください。

提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。