만드는 중입니다

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

트리와 쿼리 22

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

요약
트리의 각 정점에 적힌 값을 두 개씩 교환합니다. 시작점 u에서 w까지 경로의 수열이 사전순으로 가장 큰 w를 찾습니다. 질의는 온라인으로 주어집니다.
난이도

어려움10점 중 9점

유형
트리, 이분 탐색, 구현
정답자
아직 제출이 없습니다

문제

NN개의 정점으로 이루어진 트리가 있다. 정점은 11번부터 NN번까지 번호가 매겨져 있다. ii번 정점에는 숫자 aia_i가 쓰여 있다. 초기에는 ai=ia_i = i로 설정되어 있다.

f(u,v)f(u, v)를 uu에서 vv로 가는 경로 p0=u,p1,p2,…,pt=vp_0 = u, p_1, p_2, \ldots, p_t = v 위에 있는 숫자 ap0,ap1,…,apta_{p_0}, a_{p_1}, \ldots, a_{p_t}를 순서대로 늘어 쓴 수열이라고 하자.

다음과 같은 쿼리를 수행해야 한다.

  • u v: aua_u와 ava_v를 바꾼다. 그 후, f(u,w)f(u, w)를 최대화하는 ww를 출력한다. 수열은 사전순으로 비교한다.

쿼리는 온라인으로 주어진다. 자세한 내용은 입력 부분을 참고하면 된다.

입력

첫째 줄에 트리의 크기 NN이 주어진다. (2≤N≤200,0002 \le N \le 200,000)

다음 N−1N-1개의 줄에 두 정수 uu, vv가 주어진다. 두 정점 uu, vv를 잇는 간선이 존재함을 뜻한다. (1≤u,v≤N1 \le u, v \le N)

다음 줄에 쿼리의 개수 QQ가 주어진다. (1≤Q≤200,0001 \le Q \le 200,000)

다음 QQ개의 줄에 두 정수 xx, yy가 주어진다. (1≤x,y≤N1 \le x, y \le N, x≠yx \ne y)

lastlast를 직전 쿼리의 정답이라고 하자. 첫 쿼리라면 last=0last = 0이다. 이때 uu와 vv는 다음과 같이 구한다.

(u,v)=(((x+N−1+last) mod N)+1,((y+N−1+last) mod N)+1)(u, v) = \left(((x + N - 1 + last) \text{ mod } N) + 1, ((y + N - 1 + last) \text{ mod } N) + 1\right)

출력

QQ개의 줄에 걸쳐 각 쿼리의 정답을 출력한다.

예제2

  1. 예제 1

    입력
    3
    1 2
    2 3
    4
    3 1
    3 2
    2 1
    1 3
    
    예상 출력
    1
    3
    3
    3
    
  2. 예제 2

    입력
    10
    9 8
    10 3
    2 3
    10 9
    1 10
    6 4
    4 1
    1 5
    6 7
    15
    8 10
    2 8
    9 8
    8 2
    9 1
    2 8
    1 4
    4 1
    6 2
    6 9
    7 8
    4 2
    4 3
    10 2
    1 9
    
    예상 출력
    2
    7
    5
    8
    5
    5
    5
    8
    7
    8
    2
    7
    5
    7
    5