만드는 중입니다

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

트리와 K번째 지름

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

요약
트리가 주어졌을 때 지름 경로를 인코딩한 값 중 K번째로 작은 값을 구하고, 두 정점의 라벨을 바꾼 뒤 L번째 값을 묻는 질의에 답합니다.
난이도

어려움10점 중 9점

유형
트리, BFS, 정렬
정답자
아직 제출이 없습니다

문제

오늘 알고리즘 과목의 중간고사를 보는 메시는 시험장에 들어서자마자 감독관에게 가중치가 없는 트리를 받았다. 트리의 각 정점은 거리 1인 간선으로 이웃과 연결되어 있으며, 임의의 두 정점 사이의 최단 경로는 하나뿐이다. i번 정점에 쓰인 정수를 JiJ_i라고 할 때, Ji=iJ_i = i이다. 이어서 이메이미 교수가 들어와 칠판에 다음 문제를 적었다.

"트리의 s번 정점에서 출발하여 e번 정점에 도착하는 최단 경로를 109×Js+Je10^9 \times J_s + J_e라는 수로 인코딩한다. 주어진 트리에서 가장 긴 최단 경로(트리의 지름) 중 인코딩된 수가 K번째로 작은 것을 구하여라. 인코딩된 수가 다르면 서로 다른 지름으로 취급한다."

입력

첫 줄에 트리의 정점 수 NN과 쿼리의 수 QQ가 공백으로 구분되어 주어진다.

둘째 줄부터 N−1N-1개의 줄에 걸쳐 간선이 연결하는 두 정점의 번호 aa, bb가 공백으로 구분되어 주어진다.

N+1N+1번째 줄에는 KK가 주어진다. 처음 주어진 트리에서 K번째로 작은 지름을 구해야 한다는 뜻이다.

N+2N+2번째 줄부터 QQ개의 줄에 걸쳐 쿼리 uu, vv, LL이 공백으로 구분되어 주어진다. JuJ_u와 JvJ_v를 서로 바꾼 뒤 L번째로 작은 지름을 구해야 한다는 뜻이다.

출력

지름을 구하라는 쿼리가 들어올 때마다 인코딩된 수를 한 줄에 하나씩 출력한다. 조건을 만족하는 지름이 없으면 -1을 출력한다.

제한

  • 2≤N≤250,0002 \le N \le 250{,}000
  • 0≤Q≤250,0000 \le Q \le 250{,}000
  • 1≤K≤10181 \le K \le 10^{18}
  • 모든 쿼리에서 1≤u,v≤N1 \le u, v \le N이고, 1≤L≤10181 \le L \le 10^{18}이다.

예제2

  1. 예제 1

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

    입력
    10 5
    9 7
    6 7
    1 7
    10 9
    4 9
    2 9
    5 6
    3 1
    8 1
    4
    3 2 9
    3 9 5
    2 10 23
    3 2 22
    9 1 3
    
    예상 출력
    3000000002
    4000000005
    4000000008
    -1
    10000000009
    3000000010