트트리리와 쿼리

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

요약
원래 트리의 각 간선 양 끝에 트리 T의 사본을 붙여 만든 트리에서 두 정점 사이의 거리를 구하는 쿼리를 처리한다.
난이도

어려움10점 중 8점

유형
트리, 연결 리스트
정답자
아직 제출이 없습니다

문제

정점이 NN개이고 무방향 간선으로 이루어진 트리 TT가 주어진다. 이때 E_i=(a_i,b_i)E\_i = (a\_i, b\_i)는 트리 TT에서 ii번째 간선이 a_ia\_i번 정점과 b_ib\_i번 정점을 잇고 있다는 뜻이다.

다음은 트리 TT를 가지고 트트리리 SS를 정의한 것이다.

  • 트리 TT와 동일한 N−1N - 1개의 트리 t_1t\_1, t_2t\_2, t_3t\_3, ⋯\cdots, t_N−1t\_{N - 1}가 있다.

  • 정수쌍 (c_i,d_i)(c\_i, d\_i)가 N−1N - 1개가 있다. 이때 c_ic\_i, d_id\_i는 트리 t_it\_i에 속한 서로 다른 두 정점이다.

  • 트리 TT에서 E_iE\_i를 제거한 후 아래 과정을 진행한다.

    • 트리 TT의 a_ia\_i번 정점과 트리 t_it\_i의 c_ic\_i번 정점을 잇는 간선을 추가한다.
    • 트리 TT의 b_ib\_i번 정점과 트리 t_it\_i의 d_id\_i번 정점을 잇는 간선을 추가한다.
    • 트리 t_it\_i의 모든 정점의 번호에 N×iN \times i를 더한다.

위 과정을 모두 진행한 후 만들어진 트리를 트트리리 SS라 정의한다. 트트리리 SS에 대해 다음 쿼리를 처리하는 프로그램을 작성하시오.

  • uu vv: 정점 uu에서 정점 vv까지의 거리를 출력한다.

입력

첫 번째 줄에 NN과 QQ가 공백으로 구분되어 주어진다.

그다음 줄부터 N−1N - 1개의 줄에 걸쳐 트리 TT의 간선 정보가 주어진다. 그중 ii번째 줄은 E_iE\_i에 대한 정보이며 a_ia\_i과 b_ib\_i가 공백으로 구분되어 주어진다.

그다음 줄부터 N−1N - 1개의 줄에 걸쳐 정수쌍의 정보가 주어진다. 그중 ii번째 줄은 (c_i,d_i)(c\_i, d\_i)에 대한 정보이며 c_ic\_i과 d_id\_i가 공백으로 구분되어 주어진다.

그다음 줄부터 QQ개의 줄에 걸쳐 쿼리가 주어진다.

출력

각각의 쿼리의 결과를 순서대로 한 줄에 하나씩 출력한다.

제한

  • 2≤N≤100,0002 \le N \le 100\\,000
  • 1≤Q≤100,0001 \le Q \le 100\\,000
  • 1≤a_i,b_i,c_i,d_i≤N1 \le a\_i, b\_i, c\_i, d\_i \le N
  • a_i≠b_ia\_i \neq b\_i
  • c_i≠d_ic\_i \neq d\_i
  • 1≤i≤N−11 \le i \le N - 1
  • 1≤u,v≤N21 \le u, v \le N^2

예제1

  1. 예제 1

    입력
    4 5
    1 2
    1 3
    1 4
    4 1
    2 4
    3 2
    2 1
    11 1
    3 4
    1 16
    9 9
    
    예상 출력
    3
    3
    8
    3
    0