鉄道旅行 (Railroad Trip)
日本語
Language
Contribute a translation- Time limit
- 1000 ms
- Memory limit
- 256 MB
- Submissions
- 0
- Correct
- 0
- Solved by
- 0
- AC rate
- —
Statement
JOI 国には \(N\) 個の都市があり,それぞれ \(1, 2, \ldots, N\) の番号が付けられている.また,鉄道が \(N - 1\) 本あり,それぞれ \(1, 2, \ldots, N - 1\) の番号が付けられている.鉄道 \(i\) (\(1 \leqq i \leqq N - 1\)) は,都市 \(i\) と都市 \(i + 1\) を双方向に結んでいる.
JOI 国の鉄道に乗車する方法として,紙の切符で乗車する方法と,IC カードで乗車する方法がある.
- 鉄道 \(i\) に紙の切符で乗車する場合の運賃は \(A_i\) 円である.
- 鉄道 \(i\) に IC カードで乗車する場合の運賃は \(B_i\) 円である.ただし,IC カードで鉄道 \(i\) に乗車するには,鉄道 \(i\) で使える IC カードを事前に購入しておく必要がある.鉄道 \(i\) で使える IC カードを購入するには \(C_i\) 円かかる.一度購入した IC カードは,何度でも使用することができる.
IC カードの方が金額の処理が簡単になるため,IC カードで乗車する場合の運賃の方が紙の切符で乗車する場合の運賃よりも安い.すなわち,\(i = 1, 2, \ldots, N - 1\) に対して,\(A_i > B_i\) が成り立つ.IC カードの仕様は鉄道ごとにすべて異なるため,どの \(i\) に対しても,鉄道 \(i\) で使える IC カードを他の鉄道で使用することはできない.
あなたは,JOI 国じゅうを旅行することにした.都市 \(P_1\) から出発し,\(P_2, P_3, \ldots, P_M\) の順に都市を訪れる予定である.旅行は \(M - 1\) 日間の行程からなる.\(j\) 日目 (\(1 \leqq j \leqq M - 1\)) に都市 \(P_j\) から都市 \(P_{j + 1}\) に鉄道で移動する.この際,いくつかの鉄道を乗り継いで移動することもある.また,同じ都市を二度以上訪れることがあるかもしれない.JOI 国の鉄道は速いので,どの都市からどの都市へも \(1\) 日で移動することができる.
あなたは現在,どの鉄道の IC カードも持っていない.あなたは,あらかじめ,いくつかの鉄道の IC カードを購入し,この旅行にかかる金額,すなわち,IC カード購入費用と乗車した鉄道の運賃の和をできるだけ少なくしたい.
課題
JOI 国の都市の数,旅行の行程,および JOI 国のそれぞれの鉄道の運賃と IC カードの価格が与えられる.このとき,旅行にかかる金額の最小値を求めるプログラムを作成せよ.
Input
標準入力から以下のデータを読み込め.
- \(1\) 行目には,整数 \(N, M\) が空白を区切りとして書かれている.これらはそれぞれ,JOI 国に都市が \(N\) 個あり,旅行が \(M - 1\) 日間の行程からなることを表す.
- \(2\) 行目には,\(M\) 個の整数 \(P_1, P_2, \ldots, P_M\) が空白を区切りとして書かれている.これらは,\(j\) 日目 (\(1 \leqq j \leqq M - 1\)) に都市 \(P_j\) から都市 \(P_{j + 1}\) に鉄道で移動することを表す.
- 続く \(N - 1\) 行のうちの \(i\) 行目 (\(1 \leqq i \leqq N - 1\)) には,\(3\) つの整数 \(A_i, B_i, C_i\) が空白を区切りとして書かれている.これらはそれぞれ,鉄道 \(i\) に紙の切符で乗車したときの運賃が \(A_i\) 円,IC カードで乗車したときの運賃が \(B_i\) 円,鉄道 \(i\) で使える IC カードの金額が \(C_i\) 円であることを表す.
Output
標準出力に,旅行にかかる金額の最小値を円単位で表す整数を \(1\) 行で出力せよ.
Constraints
すべての入力データは以下の条件を満たす.
- \(2 \leqq N \leqq 100\,000\).
- \(2 \leqq M \leqq 100\,000\).
- \(1 \leqq B_i < A_i \leqq 100\,000\) (\(1 \leqq i \leqq N - 1\)).
- \(1 \leqq C_i \leqq 100\,000\) (\(1 \leqq i \leqq N - 1\)).
- \(1 \leqq P_j \leqq N\) (\(1 \leqq j \leqq M\)).
- \(P_j \neq P_{j + 1}\) (\(1 \leqq j \leqq M - 1\)).
Subtasks
小課題 1 [20 点]
以下の条件を満たす.
- \(2 \leqq N \leqq 1\,000\).
- \(M = 2\).
- \(1 \leqq B_i < A_i \leqq 1\,000\) (\(1 \leqq i \leqq N - 1\)).
- \(1 \leqq C_i \leqq 1\,000\) (\(1 \leqq i \leqq N - 1\)).
小課題 2 [30 点]
以下の条件を満たす.
- \(2 \leqq N \leqq 1\,000\).
- \(2 \leqq M \leqq 1\,000\).
- \(1 \leqq B_i < A_i \leqq 1\,000\) (\(1 \leqq i \leqq N - 1\)).
- \(1 \leqq C_i \leqq 1\,000\) (\(1 \leqq i \leqq N - 1\)).
小課題 3 [50 点]
追加の制限はない.
Examples
4 4 1 3 2 4 120 90 100 110 50 80 250 70 130
550
この場合,旅行にかかる金額を最小にする方法は以下のとおりである.
- 鉄道 \(2\) と鉄道 \(3\) の IC カードを購入する.これには \(80 + 130 = 210\) 円かかる.
- \(1\) 日目に,都市 \(1\) から都市 \(2\) まで紙の切符を使って移動し,次に都市 \(2\) から都市 \(3\) まで IC カードを使って移動する.これには \(120 + 50 = 170\) 円かかる.
- \(2\) 日目に,都市 \(3\) から都市 \(2\) まで IC カードを使って移動する.これには \(50\) 円かかる.
- \(3\) 日目に,都市 \(2\) から都市 \(3\) まで IC カードを使って移動し,次に都市 \(3\) から都市 \(4\) まで IC カードを使って移動する.これには \(50 + 70 = 120\) 円かかる.
このように移動すると,旅行にかかる金額の合計は \(210 + 170 + 50 + 120 = 550\) 円となる.これが最小であるので,\(550\) と出力する.
8 5 7 5 3 5 4 12 5 8 16 2 1 3 1 5 17 12 17 19 7 5 12 2 19 4 1 3
81
Notes
JOI 2015 · JCIOI · CC BY-SA 4.0
Tags
No tags yet