만드는 중입니다

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

거리 합 최대화

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

요약
트리가 주어지고, 각 질의 (u, v)에 대해 모든 정점 x에 걸친 dist(x,u) + dist(x,v)의 최댓값을 구합니다.
난이도

보통10점 중 7점

유형
트리, 세그먼트 트리, DFS
정답자
아직 제출이 없습니다

문제

NN개의 정점으로 이루어진 트리(사이클이 없는 연결된 무방향 그래프)가 주어진다. 정점은 11번부터 NN번까지 번호가 매겨져 있고, 간선은 11번부터 (N−1)(N-1)번까지 번호가 매겨져 있다.

아래의 쿼리를 처리하는 프로그램을 작성하시오.

  • uu vv: 정점 xx(1≤x≤N1\le x\le N)에 대해 dist⁡(x,u)\operatorname{dist}(x,u) + dist⁡(x,v)\operatorname{dist}(x,v)의 최댓값을 출력한다. (1≤u,v≤N1\le u,v\le N)

여기서 dist⁡(x,y)\operatorname{dist}(x,y)는 정점 xx에서 정점 yy까지 가는 최단경로 상의 간선 개수이다. 트리의 모든 정점 xx에 대해 dist⁡(x,x)=0\operatorname{dist}(x,x) = 0이다.

입력

첫째 줄에 트리의 정점 수 NN(2≤N≤300 0002\le N\le 300\,000)이 주어진다.

다음 (N−1)(N-1)개의 줄에는 트리의 정보가 주어진다. ii번째 줄에는 ii번 간선이 연결하는 두 정점 번호가 공백을 사이에 두고 주어진다.

다음 줄에 쿼리의 수 QQ(2≤Q≤300 0002\le Q\le 300\,000)가 주어진다. 이어지는 QQ개의 줄에는 쿼리가 한 줄에 하나씩 주어진다.

출력

QQ개의 쿼리에 대한 답을 순서대로 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

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