만드는 중입니다

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

삼각형 모험

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

요약
N×M 격자의 각 칸을 대각선 벽으로 나눈 삼각형들 사이에서, 두 삼각형을 잇는 최소 이동 횟수를 Q개의 질의마다 구합니다. 갈 수 없으면 -1을 출력합니다.
난이도

어려움10점 중 8점

유형
최단 경로, 유니온 파인드, 그래프
정답자
아직 제출이 없습니다

문제

포닉스는 N×MN \times M 크기의 격자에서 살고 있었다. 각 칸은 정사각형이며, 포닉스는 상하좌우로 인접한 칸으로 자유롭게 이동할 수 있었다.

어느 날 사악한 마법사가 각 칸에 넘을 수 없는 대각선 모양의 벽을 설치했다. 그 결과 각 칸은 직각이등변삼각형 모양의 두 영역으로 나뉘었다. 포닉스는 상하좌우로는 이전처럼 이동할 수 있지만, 대각선 벽을 넘을 수는 없다. 즉, 대각선이 아닌 변을 통해 인접한 삼각형으로만 이동할 수 있다. 포닉스는 자주 다니던 QQ개의 경로에 대해 새로운 최소 이동 횟수를 계산하려 한다. QQ개의 질문은 다음과 같이 주어진다.

  • x_1 y_1 t_1 x_2 y_2 t_2x\_1 \ y\_1 \ t\_1 \ x\_2 \ y\_2 \ t\_2: (x_1,y_1,t_1)(x\_1, y\_1, t\_1)에서 출발해 (x_2,y_2,t_2)(x\_2, y\_2, t\_2)로 도착하기 위한 이동 횟수의 최솟값을 구하여라.

입력

첫 번째 줄에 격자의 크기를 나타내는 정수 NN, MM과 질문의 개수 QQ가 공백으로 구분되어 주어진다. (1≤N,M≤500;1≤Q≤300 0001 \leq N, M \leq 500; 1 \leq Q \leq 300\ 000)

두 번째 줄부터 NN개의 줄에 걸쳐 길이 MM의 문자열이 주어진다. ii번째 줄의 jj번째 문자는 ii번째 행 jj번째 열 칸에 나타난 대각선 벽의 형태를 의미한다. Z는 우상향 대각선, N은 우하향 대각선을 의미한다.

N+2N+2번째 줄부터 QQ개의 줄에 걸쳐 x_1 y_1 t_1 x_2 y_2 t_2x\_1 \ y\_1 \ t\_1 \ x\_2 \ y\_2 \ t\_2 형태의 질문이 주어진다. (1≤x_1,x_2≤N;1≤y_1,y_2≤M;0≤t_1,t_2≤11 \leq x\_1, x\_2 \leq N; 1 \leq y\_1, y\_2 \leq M; 0 \leq t\_1, t\_2 \leq 1)

주어지는 수는 모두 정수이다. t=0t = 0은 해당 좌표의 위쪽 삼각형 영역을, t=1t = 1은 아래쪽 삼각형 영역을 의미한다.

출력

각 질문에 대해 (x_1,y_1,t_1)(x\_1, y\_1, t\_1)에서 출발해 (x_2,y_2,t_2)(x\_2, y\_2, t\_2)로 도착하기 위한 이동 횟수의 최솟값을 한 줄에 하나씩 순서대로 출력한다. 해당하는 경로가 존재하지 않으면 -1을 출력한다.

힌트

포닉스의 모험기는 후대에도 포스테키안들에게 전설로 전해진다. 포스텍은 이를 기억하기 위해 학생회관 한편에 모험 당시의 격자를 재현해 두었다.

예제2

  1. 예제 1

    입력
    4 4 3
    NNZN
    NZNN
    ZZZN
    NNZN
    1 1 0 1 1 1
    3 1 1 4 4 0
    2 1 1 3 3 0
    
    예상 출력
    4
    10
    -1
    
  2. 예제 2

    입력
    3 4 4
    ZNZN
    NNNN
    ZNZZ
    2 2 0 2 2 1
    1 2 1 2 1 0
    2 4 0 3 3 1
    1 4 0 3 4 1
    
    예상 출력
    4
    2
    6
    -1