東京の鉄道ネットワークは非常に複雑である.
たとえば,図D-1のような路線図が含まれている.
図D-1: 路線図の例
この路線図の上で,A駅からD駅に行きたいとする.
最短距離の経路を選ぶなら,A→B→Dと行けばよいことは明らかである.
しかし,最短距離の経路が必ず最小コストの経路になるとは限らない.
図で,A-B,B-C,C-Dが同じ鉄道会社の線で,B-Dだけ別の会社の線だったとする.
この場合,A→B→C→Dの経路の方がA→B→Dの経路より安いことがありうる.
その要因の一つは,運賃が距離に比例していないことである.
距離が長いほど,単位距離当たりの運賃は安くなるように設定されていることが多い.
複数の会社の線を乗り継ぐと,それぞれの会社の運賃を単純に合計するので,
単一の会社の線だけを使った経路に比べて,距離は短くとも,
運賃は割高になってしまうことがあるのだ.
この問題では,複数の鉄道会社からなる路線図が与えられる.
また,それぞれの会社の運賃表(距離から運賃を計算するルール)が与えられる.
出発地と目的地が与えられたとき,最も安い運賃の経路を求めるプログラムを書くことがあなたの仕事である.
入力は複数のデータセットから構成される.
各データセットの形式は次に示すとおりである.
n m c s g
x1 y1 d1 c1
...
xm ym dm cm
p1 ... pc
q1,1 ... q1,p1-1
r1,1 ... r1,p1
...
qc,1 ... qc,pc-1
rc,1 ... rc,pc
データセットの中の入力項目は,すべて非負の整数である.
行中の入力項目の区切りは空白1個である.
最初の行は,鉄道ネットワークの大きさと実現したい旅行を規定する.
n は駅の数である(2 ≤ n ≤ 100).
m は駅と駅をつなぐ路線の数である(0 ≤ m ≤ 10000).
c は鉄道会社の数である(1 ≤ c ≤ 20).
s は出発地の駅番号である(1 ≤ s ≤ n).
g は目的地の駅番号である(1 ≤ g ≤ n, g ≠ s).
続いて,m 本の路線のデータが順次与えられる.
それぞれの行は,二つの駅xi とyi を結ぶ路線の記述である(1 ≤ xi ≤ n,
1 ≤ yi ≤ n,
xi ≠ yi).
各路線は,どちらの方向の移動にも使える.
同じ二つの駅を結ぶ路線が2本以上存在することもあり得る.
di は,その路線の長さ(移動距離)である(1 ≤ di ≤ 200).
ci は,その路線を運営する鉄道会社の番号である(1 ≤ ci ≤ c).
各鉄道会社の運賃表(距離と運賃の関係)は折れ線グラフで与えられる.
鉄道会社j 番に対して,
折れ線の区間の数(折れ目の数プラス 1)がpj である
(1 ≤ pj ≤ 50).
qj,k (1 ≤ k ≤ pj-1)が折れ目の位置を示す距離の値である
(1 ≤ qj,k ≤ 10000).
rj,k (1 ≤ k ≤ pj)が該当する距離の範囲に対して距離 1 当たりの運賃の増分を与える
(1 ≤ rj,k ≤ 100).
より詳しく言えば,距離z のときの運賃を
fj (z) と表すと,
qj,k-1+1 ≤ z ≤ qj,k を満たす距離z に対して
fj (z) = fj (z-1)+rj,k である.
ただし,qj,0 とfj (0)はゼロ,
qj,pj は無限大と仮定する.
たとえば,pj が 3 で,
qj,1 = 3,
qj,2 = 6,
rj,1 = 10,
rj,2 = 5,
rj,3 = 3
だったとする.
この場合の距離と運賃の対応関係は次のようになる.
距離 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
運賃 | 10 | 20 | 30 | 35 | 40 | 45 | 48 | 51 | 54 |
qj,k は,k に関して単調増加である.
rj,k は,k に関して単調減少である.
最後のデータセットの直後に,空白で区切られた五つのゼロからなる行がある.
入力の各データセットに対して,合計運賃が最小になるような経路を選んだときの所要運賃を答えなさい.
ただし,出発地から目的地に到達できない場合は "-1" と出力すること.
出力行の中に,結果を表す文字以外のもの(たとえば空白)が含まれていてはならない.
出発地から目的地までの経路を定めたときの運賃の計算ルールは次のとおりとする.
同じ会社の複数の路線を連続して経由する場合は,これらの路線の合計距離に基づいて運賃を決める.
全体の運賃は,こうして決めた同一会社連続区間の運賃の総和である.
同じ会社の路線を複数利用していても,間にほかの会社の路線がはさまっている場合は,前後の区間の運賃を独立に計算する.
乗り継ぎ割引のような制度は存在しない.