철도 연결
시간 제한1초메모리 제한128 MB
여러 회사가 운영하는 역 연결망에서 같은 회사 간선이 연속된 구간마다 그 회사의 거리별 요금표로 계산할 때, 출발역에서 도착역까지 최소 요금 경로를 구한다.
문제
도쿄의 철도망은 매우 복잡하다. 아래 그림은 노선과 역의 일부를 나타낸 지도이다.

철도망 예시.
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
x_1 y_1 d_1 c_1
...
x_m y_m d_m c_m
p_1 ... p_c
q_1,1 ... q_1,(p_1 - 1)
r_1,1 ... r_1,p_1
...
q_c,1 ... q_c,(p_c - 1)
r_c,1 ... r_c,p_c
모든 값은 음이 아닌 정수이며, 같은 줄의 값은 공백 하나로 구분된다.
첫 번째 줄은 철도망과 이동 정보를 나타낸다. 은 역의 수 (), 은 두 역을 잇는 노선의 수 (), 는 철도 회사의 수 ()이다. 는 출발역 번호, 는 도착역 번호이다 (, ).
이어지는 개의 줄은 각 노선을 설명한다. 번째 노선은 역 와 를 잇고 (, ) 양방향으로 이동할 수 있다. 같은 두 역을 잇는 노선이 여러 개 있을 수 있다. 는 노선의 길이 (), 는 그 노선을 운영하는 회사의 번호이다 ().
각 회사의 요금표는 거리에 대한 구간별 선형 함수이다. 회사 에 대해 는 구간의 개수 ()이다. (, )는 구간이 바뀌는 거리이고, (, )는 구간 에서 단위 거리마다 추가되는 요금이다. 거리 에 대한 요금을 라 하면,
이 성립하며, , , 이다.
예를 들어 , , , , , 이면 요금표는 다음과 같다.
는 에 대해 증가하고, 는 에 대해 감소한다.
마지막 데이터셋 다음에는 공백으로 구분된 다섯 개의 0으로 이루어진 줄이 오며, 이 줄은 처리하지 않는다.
출력
각 데이터셋에 대해, 출발역에서 도착역까지 가는 경로의 최소 총요금을 한 줄에 출력한다. 도착역에 도달할 수 없으면 대신 -1을 출력한다. 뒤따르는 공백 등 불필요한 문자는 출력하지 않는다.
경로가 정해지면 총요금은 다음과 같이 계산한다. 경로를 같은 회사가 연속으로 운영하는 노선들의 최대 묶음으로 나눈다. 각 묶음에 대해 그 안의 노선 길이를 모두 더한 뒤, 그 합산 거리로 해당 회사의 요금표에서 요금을 구한다. 경로의 총요금은 이러한 묶음별 요금의 합이다. 같은 회사의 두 노선 사이에 다른 회사의 노선이 끼어 있으면, 그 두 노선은 서로 다른 묶음에 속하며 요금은 독립적으로 계산된다. 어떤 회사도 환승 할인을 제공하지 않는다.