아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

삼각분할 위의 거리

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

요약
삼각분할된 볼록 다각형에서 변과 대각선으로 두 꼭짓점을 잇는 최단 간선 수를 질의마다 구합니다.
난이도

어려움10점 중 8점

유형
분할 정복, 최단 경로, 그래프, BFS
정답자
아직 제출이 없습니다

문제

볼록다각형이 하나 있다. 꼭짓점에는 둘레를 따라 1번부터 nn번까지 차례로 번호가 붙어 있다. 이 다각형의 삼각분할도 함께 주어지며, 삼각분할은 서로 교차하지 않는 대각선 n−3n-3개로 이루어진다.

질의가 qq개 주어진다. 각 질의는 꼭짓점 번호 두 개로 이루어진다. 다각형의 변과 주어진 대각선을 따라서만 이동할 수 있을 때, 질의로 주어진 두 꼭짓점 사이의 최단 거리를 구한다. 거리는 지나간 변과 대각선의 개수이다.

입력

첫째 줄에 다각형의 꼭짓점 개수 nn이 주어진다. (4≤n≤500004 \le n \le 50000)

다음 n−3n-3개 줄에는 각각 두 정수 aia_i, bib_i가 주어진다. ii번째 대각선의 두 끝점이다. (1≤ai,bi≤n1 \le a_i, b_i \le n, ai≠bia_i \ne b_i)

다음 줄에 질의의 개수 qq가 주어진다. (1≤q≤1000001 \le q \le 100000)

이어지는 qq개 줄에는 각각 두 정수 xix_i, yiy_i가 주어진다. ii번째 질의의 두 꼭짓점이다. (1≤xi,yi≤n1 \le x_i, y_i \le n)

어떤 대각선도 다각형의 변과 일치하지 않으며, 두 대각선이 서로 같거나 교차하는 경우도 없다.

출력

각 질의마다 최단 거리를 한 줄에 하나씩 출력한다.

힌트

그림은 첫 번째 예제에 주어진 다각형과 삼각분할이다.

예제2

  1. 예제 1

    입력
    6
    1 5
    2 4
    5 2
    5
    1 3
    2 5
    3 4
    6 3
    6 6
    
    예상 출력
    2
    1
    1
    3
    0
    
  2. 예제 2

    입력
    4
    1 3
    16
    1 1
    1 2
    1 3
    1 4
    2 1
    2 2
    2 3
    2 4
    3 1
    3 2
    3 3
    3 4
    4 1
    4 2
    4 3
    4 4
    
    예상 출력
    0
    1
    1
    1
    1
    0
    1
    2
    1
    1
    0
    1
    1
    2
    1
    0