만드는 중입니다

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

가장 안전한 택시

시간 제한1초메모리 제한1024 MB

요약
교차로와 차선으로 이루어진 격자에서 좌회전을 X회 이하, 차선 변경을 Y회 이하로 하면서 각 여행의 최단 시간을 구합니다.
난이도

보통10점 중 6점

유형
최단 경로, 그래프, 구현
정답자
아직 제출이 없습니다

문제

도로망이 N×MN \times M 격자 모양인 도시를 생각해 보자. 인접한 교차로는 도로로 연결되어 있고, 모든 도로는 양방향으로 달릴 수 있다. 각 방향에는 한 끝점에서 다른 끝점까지 이동하는 데 걸리는 시간이 주어진다.

도로의 각 방향은 하나 이상의 차선으로 이루어진다. 차선은 좌회전, 직진, 우회전 중 하나, 또는 이들의 조합 용도로 쓰인다. 다만 좌회전 차선은 직진 차선이나 우회전 차선의 오른쪽에 놓일 수 없고, 직진 차선은 우회전 차선의 오른쪽에 놓일 수 없다. 유턴 차선은 없다.

교차로 통과 규칙은 위 그림과 같다(차량이 남쪽에서 교차로로 진입하는 경우). 좌회전하려면 차량이 LL개의 좌회전 차선 중 하나에 있어야 한다. 좌회전 차선은 왼쪽에서 오른쪽으로 11번부터 LL번까지 번호를 붙인다. ii번 차선은 목적 도로의 왼쪽에서 ii번째 차선으로 진입해야 한다. 다만 LL번 차선은 목적 도로의 LL번째 차선 또는 그 오른쪽에 있는 어느 차선으로든 진입할 수 있다.

직진하려면 차량이 SS개의 직진 차선 중 하나에 있어야 한다. 직진 차선은 왼쪽에서 오른쪽으로 11번부터 SS번까지 번호를 붙인다. ii번 차선은 목적 도로의 왼쪽에서 ii번째 차선으로 진입해야 한다. 다만 SS번 차선은 목적 도로의 SS번째 차선 또는 그 오른쪽에 있는 어느 차선으로든 진입할 수 있다.

우회전하려면 차량이 RR개의 우회전 차선 중 하나에 있어야 한다. 이 규칙에서는 우회전 차선을 오른쪽에서 왼쪽으로 11번부터 RR번까지 번호를 붙인다. ii번 차선은 목적 도로의 오른쪽에서 ii번째 차선으로 진입해야 한다. 다만 RR번 차선은 목적 도로의 RR번째 차선 또는 그 왼쪽에 있는 어느 차선으로든 진입할 수 있다.

좌회전, 직진, 우회전 차선 중 하나 이상이 존재하면, 목적 도로가 반드시 있고 해당 이동을 수용할 차선 수를 갖추고 있다고 보장된다. 교차로 통과에 걸리는 시간은 무시한다.

교차로에서 목적 도로의 적법한 차선으로 진입하는 것은 차선 변경으로 치지 않는다. 운전자는 도로 중간에서 차선을 바꿀 수 있고, 차선 변경에 걸리는 시간은 무시한다.

여행은 도로 중점의 가장 오른쪽 차선에서 출발하여 가장 오른쪽 차선에서 끝난다. 중점에서 끝점까지 가는 시간은 두 끝점 사이를 가는 시간의 절반이다.

당신은 이 도시에서 '안전한 택시'라는 회사를 운영한다. 슬로건은 '당신의 안전은 당신의 손에 달려 있습니다'이다. 고객은 여행마다 수 XX와 YY를 고를 수 있다. 기사는 여행을 마치는 동안 좌회전을 최대 XX번, 차선 변경을 최대 YY번 한다.

이 규칙들을 따를 때 각 여행을 마치는 데 걸리는 최단 시간은 얼마인가?

입력

첫 줄에는 세 정수 NN (2≤N≤152 \leq N \leq 15), MM (2≤M≤152 \leq M \leq 15), KK (1≤K≤31 \leq K \leq 3)를 공백 하나로 구분해 입력한다. 도시에는 남북 방향으로 NN개, 동서 방향으로 MM개의 교차로가 있다. 각 도로에는 KK개의 차선이 있다.

둘째 줄에는 도로 구간의 개수 DD를 하나의 정수로 입력한다. 인접한 교차로의 모든 쌍은 목록에 정확히 한 번씩 나타난다.

이어지는 DD개의 줄은 각각 다음 형식으로 한 구간을 나타낸다.

R0R_0 C0C_0 R1R_1 C1C_1 TT L0L_0 L1L_1 ... LK−1L_{K-1}

이 구간은 행 R0R_0, 열 C0C_0의 교차로에서 행 R1R_1, 열 C1C_1의 교차로로 간다(0≤R0,R1<N0 \leq R_0, R_1 < N, 0≤C0,C1<M0 \leq C_0, C_1 < M). 행은 북쪽에서 남쪽으로 00부터 N−1N-1까지, 열은 서쪽에서 동쪽으로 00부터 M−1M-1까지 번호를 붙인다. 두 교차로는 서로 인접해야 하며, ∣R0−R1∣+∣C0−C1∣=1|R_0 - R_1| + |C_0 - C_1| = 1을 만족한다. 구간 전체를 지나는 데 TT의 시간이 걸린다(2≤T≤1002 \leq T \leq 100, TT는 짝수). 이어지는 KK개의 토큰은 왼쪽에서 오른쪽 순서로 각 차선의 용도를 나타낸다.

차선의미
L좌회전 전용
S직진 전용
R우회전 전용
LR좌회전 또는 우회전
LS좌회전 또는 직진
SR직진 또는 우회전
LSR좌회전, 직진, 또는 우회전

다음 줄에는 여행의 개수 PP (1≤P≤501 \leq P \leq 50)를 하나의 정수로 입력한다. 이어지는 PP개의 줄은 각각 다음 형식으로 한 여행을 나타낸다.

RS0R_{S0} CS0C_{S0} RS1R_{S1} CS1C_{S1} RD0R_{D0} CD0C_{D0} RD1R_{D1} CD1C_{D1} XX YY

여행은 구간 (RS0,CS0)→(RS1,CS1)(R_{S0}, C_{S0}) \to (R_{S1}, C_{S1})의 중점에서 출발하여 구간 (RD0,CD0)→(RD1,CD1)(R_{D0}, C_{D0}) \to (R_{D1}, C_{D1})의 중점에서 끝난다. 두 구간은 위 목록에 있다. 출발점과 도착점은 모두 가장 오른쪽 차선 위에 있다. 고객이 허용하는 좌회전은 최대 XX번(0≤X≤40 \leq X \leq 4), 차선 변경은 최대 YY번(0≤Y≤40 \leq Y \leq 4)이다.

출력

PP개의 줄을 출력한다. ii번째 줄에는 ii번째 여행을 이 규칙들에 따라 마치는 최단 시간을 출력한다. 가능한 경로가 없으면 −1-1을 출력한다.

힌트

예제 출력의 처음 세 줄은 아래 그림에 나타나 있다.

  • X=1X = 1이고 Y=1Y = 1이면 최단 경로는 빨간색이다. E에 도달하기 전에 차선을 바꾸고 좌회전한다. 총 시간은 8/2+8/2=88/2+8/2=8이다.
  • X=1X = 1이고 Y=0Y = 0이면 최단 경로는 초록색이다. E-F-I-H-E를 거쳐 좌회전한다. 총 시간은 8/2+16+8+8+8+8/2=488/2+16+8+8+8+8/2=48이다.
  • X=0X = 0이고 Y=0Y = 0이면 최단 경로는 파란색이다. E-B-C-F-E를 거친다. 총 시간은 8/2+16+16+8+18+8/2=668/2+16+16+8+18+8/2=66이다.

예제1

  1. 예제 1

    입력
    3 3 2
    24
    0 0 0 1 6 S R
    0 1 0 0 8 L L
    0 1 0 2 16 R R
    0 2 0 1 18 LS S
    0 0 1 0 8 LS S
    1 0 0 0 8 R R
    0 1 1 1 10 LS SR
    1 1 0 1 16 L R
    0 2 1 2 8 S R
    1 2 0 2 8 L L
    1 0 1 1 6 L SR
    1 1 1 0 8 L R
    1 1 1 2 16 L R
    1 2 1 1 18 L SR
    1 0 2 0 8 L L
    2 0 1 0 8 S R
    1 1 2 1 10 L R
    2 1 1 1 8 LS SR
    1 2 2 2 8 R R
    2 2 1 2 8 LS S
    2 0 2 1 10 LS S
    2 1 2 0 12 R R
    2 1 2 2 6 L L
    2 2 2 1 8 S SR
    6
    2 1 1 1 1 1 1 0 1 1
    2 1 1 1 1 1 1 0 1 0
    2 1 1 1 1 1 1 0 0 0
    0 1 0 2 0 2 0 1 2 0
    1 0 0 0 0 0 1 0 2 0
    2 1 2 0 2 0 2 1 2 0
    
    예상 출력
    8
    48
    66
    131
    112
    95