만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

1 Day Passport

시간 제한8초메모리 제한512 MB

요약
모든 열차가 정시에만 출발하는 조건에서, 회사별 무제한 승차권 조합과 개별 운임을 섞어 S역에서 T역까지 H시간 안에 도착하는 최소 비용을 구한다.
난이도

어려움10점 중 8점

유형
최단 경로, 비트 연산, 동적 계획법, 그래프
정답자
아직 제출이 없습니다

문제

어느 나라에 사는 대학생 D는 국민적 기타리스트 A의 열렬한 팬으로, 이번 여름 도심에서 열리는 라이브 공연에 가려고 한다. 그러나 D는 변경에 살기 때문에 교통비가 많이 들까 봐 매우 걱정했다. 그때 그는 JAG라는 조직이 저렴하게 판매하는 "1Day 패스포트"의 존재를 알게 되었다.

JAG (Journey Administrative Group)는 D가 사는 나라에 있는 여러 철도 회사를 총괄하는 조직이다. JAG는 전국에 여러 역을 두고, 역 사이를 잇는 노선을 운영한다. 각 노선은 JAG에 속한 회사 중 한 곳이 관리하며, 두 역을 중간 역 없이 양방향으로 연결한다. 또한 각 노선에는 이용할 때의 운임과 소요 시간이 정해져 있다 (어느 방향으로 이동해도 같다). JAG의 열차 운행은 단순해서, 열차는 매시 0분에 역에 도착하고 출발한다. 또 JAG의 각 역은 매우 효율적으로 설계되어, 노선을 갈아타는 데 걸리는 시간은 무시할 수 있다. 이동에 필요한 교통비는 운임의 단순한 합이다.

1Day 패스포트는 JAG가 최근의 경영난을 벗어나기 위해 판매하기 시작한 무제한 승차 패스포트이다. JAG는 여러 종류의 1Day 패스포트를 판매한다. 각 패스포트는 JAG가 지정한 판매 가격으로 살 수 있다. 또한 패스포트에는 JAG에 속한 회사 이름이 몇 개 적혀 있고, 이 회사가 관리하는 모든 노선을 하루 동안 (추가 요금 없이) 무제한으로 탈 수 있다. 패스포트는 몇 개든 살 수 있고, 여러 패스포트를 함께 쓸 수 있다. 다만 패스포트에 적히지 않은 회사가 관리하는 노선을 지나갈 경우, 그 노선의 운임은 평소대로 내야 한다.

D는 1Day 패스포트를 잘 활용해서 되도록 돈을 적게 쓰고 라이브 회장까지 가고 싶어 한다. 또한 숙박으로 돈을 더 쓰기 싫어서, 이 나라의 하루인 HH시간 이내에 라이브 회장까지 도착하려고 한다. 그러나 그는 계산을 잘하지 못해서, 같은 대학 친구이자 프로그래밍을 잘하는 당신에게 도움을 청했다. 곤란해하는 D를 위해, 다음과 같은 프로그램을 작성해 주자.

JAG의 노선 정보와 1Day 패스포트 정보가 주어졌을 때, D의 가장 가까운 역에서 라이브 회장의 가장 가까운 역까지 HH시간 이내에 이동하는 최소 비용 (패스포트 값과 운임 합계의 최솟값)을 구하는 프로그램을 작성하라. HH시간 이내에 도달할 수 없거나 라이브 회장으로 가는 경로가 없으면 -1을 출력하라.

입력

입력은 여러 데이터 세트로 이루어지며, 하나의 입력에 포함되는 데이터 세트 수는 150 이하이다. 각 데이터 세트의 형식은 다음과 같다.

NN MM HH KK

a1a_1 b1b_1 c1c_1 h1h_1 r1r_1

...

aMa_M bMb_M cMc_M hMh_M rMr_M

SS TT

PP

l1l_1 d1d_1 k1,1k_{1,1} ... k1,l1k_{1,l_1}

...

lPl_P dPd_P kP,1k_{P,1} ... kP,lPk_{P,l_P}

입력은 모두 정수로 주어진다.

먼저 JAG의 노선 정보가 주어진다. NN (2≤N≤1002 \le N \le 100)은 역의 수, MM (1≤M≤5001 \le M \le 500)은 노선의 수, HH (1≤H≤241 \le H \le 24)는 하루의 시간, KK (1≤K≤81 \le K \le 8)는 JAG에 속한 회사의 수를 나타낸다. 각 역에는 1,2,…,N1, 2, \ldots, N의 번호가 붙어 있다. 또 각 회사에는 1,2,…,K1, 2, \ldots, K의 번호가 붙어 있다. 이어서 MM개 줄에 걸쳐 노선 정보가 입력된다. aia_i와 bib_i (1≤ai<bi≤N1 \le a_i < b_i \le N)는 ii번째 노선이 연결하는 두 역을 나타낸다. cic_i (1≤ci≤10,0001 \le c_i \le 10{,}000)는 ii번째 노선의 운임, hih_i (1≤hi≤H1 \le h_i \le H)는 노선의 소요 시간, rir_i (1≤ri≤K1 \le r_i \le K)는 노선을 관리하는 회사를 나타낸다. 어떤 두 역을 연결하는 노선이 두 개 이상 존재하지는 않는다.

다음 줄에는 D의 가장 가까운 역 SS와 A의 라이브 회장의 가장 가까운 역 TT가 주어진다 (1≤S,T≤N1 \le S, T \le N). SS와 TT는 서로 다른 값이다.

다음으로 1Day 패스포트 정보가 주어진다. PP (0≤P≤2K−10 \le P \le 2^K - 1)는 1Day 패스포트의 종류 수를 나타낸다. 이어서 PP개 줄에 걸쳐 1Day 패스포트 정보가 입력된다. ljl_j (1≤lj≤K1 \le l_j \le K)와 djd_j (1≤dj≤10,0001 \le d_j \le 10{,}000)는 각각 jj번째 1Day 패스포트에 적힌 회사 수와 패스포트 요금을 나타낸다. 같은 줄에 jj번째 패스포트에 적힌 ljl_j개의 회사 번호 kj,1,kj,2,…,kj,ljk_{j, 1}, k_{j, 2}, \ldots, k_{j, l_j} (1≤kj,1<kj,2<⋯<kj,lj≤K1 \le k_{j, 1} < k_{j, 2} < \cdots < k_{j, l_j} \le K)가 주어진다. 같은 회사 조합으로 이루어진 1Day 패스포트가 여러 번 입력되지는 않는다.

입력의 끝은 N=M=H=K=0N=M=H=K=0인 줄로 나타낸다. 이 데이터는 처리해서는 안 된다.

출력

각 데이터 세트에 대해 계산 결과를 한 줄로 출력하라. 즉 D의 가장 가까운 역에서 라이브 회장의 가장 가까운 역으로 가는 경로가 존재하고 HH시간 이내에 도달할 수 있으면, 그에 필요한 최소 요금을, 도달할 수 없으면 -1을 출력하라.

예제1

  1. 예제 1

    입력
    3 3 3 2
    1 2 3 1 1
    1 3 8 1 1
    2 3 3 2 2
    1 3
    0
    3 3 2 2
    1 2 3 1 1
    1 3 8 1 1
    2 3 3 2 2
    1 3
    0
    6 4 3 2
    1 2 3 1 1
    1 3 8 1 1
    4 6 3 2 2
    5 6 7 2 2
    1 6
    0
    3 3 3 2
    1 2 3 1 1
    1 3 8 1 1
    2 3 3 2 2
    1 3
    2
    2 6 1 2
    1 2 2
    3 3 2 2
    1 2 3 1 1
    1 3 8 1 1
    2 3 3 2 2
    1 3
    2
    2 6 1 2
    1 2 2
    3 2 2 2
    1 2 3 1 1
    2 3 3 2 2
    1 3
    2
    2 6 1 2
    1 2 2
    5 4 20 4
    2 4 100 5 1
    1 4 100 5 3
    1 5 100 5 4
    3 5 100 5 2
    3 2
    3
    2 80 1 2
    2 60 1 3
    2 40 2 3
    0 0 0 0
    
    예상 출력
    6
    8
    -1
    5
    6
    -1
    200