모임과 쿼리

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

요약
각 번호 범위마다 그 범위에 속한 모든 사람까지의 가중 트리 거리 최댓값을 가장 작게 만드는 값을 구한다.
난이도

어려움10점 중 8점

유형
트리, 분할 정복, 세그먼트 트리, 최단 경로
정답자
아직 제출이 없습니다

문제

가중치 있는 트리 구조의 마을에서 11번부터 NN번까지 NN명의 사람들이 살고 있다. ii번 사람은 ii번 정점에 살고 있다.

사람들은 모임을 QQ번 갖는데, kk번째 모임에서는 11 이상 NN 이하의 원하는 정수 x_kx\_k를 골라 번호가 ℓ_k\ell\_k 이상 r_kr\_k 이하인 사람들이 참여한다.

kk번째 모임에 걸리는 시간 t_kt\_k는 모임에 참여하는 각 사람과 x_kx\_k까지의 거리 중 최댓값이다.

t_kt\_k가 최소가 되도록 x_kx\_k를 고를 때, 각 모임에 걸리는 시간 t_kt\_k를 계산해 보자.

입력

첫째 줄에 사람들의 수 NN과 모임의 수 QQ가 공백으로 구분되어 주어진다. (1≤N,Q≤100,0001 \le N, Q \le 100\\,000)

다음 N−1N-1개 줄 중 ii번째 줄에는 트리의 간선 정보를 나타내는 정수 a_ia\_i, b_ib\_i, c_ic\_i가 공백으로 구분되어 주어진다. 이는 a_ia\_i번 정점과 b_ib\_i번 정점을 잇는 가중치가 c_ic\_i인 간선이 있다는 뜻이다. (1≤a_i,b_i≤N1 \le a\_i, b\_i \le N, 1≤c_i≤1091 \le c\_i \le 10^9, a_i≠b_ia\_i \ne b\_i)

다음 QQ개 줄 중 kk번째 줄에는 kk번째 모임에 참여하는 사람들의 번호 범위를 나타내는 정수 ℓ_k\ell\_k, r_kr\_k가 공백으로 구분되어 주어진다. (1≤ℓ_k≤r_k≤N1 \le \ell\_k \le r\_k \le N)

출력

각 모임마다 모임에 걸리는 시간 t_kt\_k를 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    5 3
    1 2 2
    1 4 5
    1 3 2
    4 5 6
    2 3
    1 5
    4 5
    
    예상 출력
    2
    7
    6