Distance Multiplication Maximization

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

요약
각 쿼리에서 두 정점 u, v가 주어질 때 모든 정점 x 중 dist(x,u)*dist(x,v)를 최대로 하는 값을 출력한다.
난이도

어려움10점 중 8점

유형
트리, DFS, 분할 정복, 그리디
정답자
아직 제출이 없습니다

문제

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

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

  • uu vv: 정점 xx(1≤x≤N1\le x\le N)에 대해, dist⁡(x,u)×dist⁡(x,v)\operatorname{dist}(x,u)\times\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 2
    2 5
    3 3
    
    예상 출력
    6
    3
    9