만드는 중입니다

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

트리의 외심

시간 제한2초메모리 제한512 MB

요약
트리와 여러 개의 정점 삼중항이 주어질 때, 각 삼중항에 대해 세 정점까지의 거리가 모두 같으면서 그 거리가 최소인 정점을 출력하고, 존재하지 않으면 -1을 출력한다.
난이도

어려움10점 중 8점

유형
트리, 그래프, BFS, 수학
정답자
아직 제출이 없습니다

문제

알고리즘에 푹 빠진 동관이는 트리에 심취한 나머지 트리에서 외심을 정의하려 한다. 트리란 모든 정점이 연결되어 있으면서 사이클이 존재하지 않는 그래프이다. 하지만 동관이는 트리에서 외심을 정의하려면 "트리에서 두 정점 사이의 거리"도 정의해야 한다는 사실을 깨달았다.

트리에서 두 정점 사이의 거리는 한 정점에서 다른 정점으로 가기 위해 거쳐야 하는 최소한의 간선 개수로 정의된다. 트리의 세 정점에 대해, 트리의 외심은 세 정점으로부터의 거리가 같으면서 그 거리를 최소로 하는 정점이 존재하면 그 정점으로 정의된다. 트리의 세 정점에 대해 외심이 존재한다면 유일하다는 것을 수학적으로 보일 수 있다.

외심을 정의하는 3개의 정점이 달라지면 같은 트리라도 외심이 달라진다는 것은 자명하다. 동관이는 다양한 외심을 찾아보고 싶지만 코딩은 귀찮다. 여러분이 동관이를 대신해 코드를 짜주자.

입력

첫 번째 줄에 정점의 개수 NN이 주어진다. (1≤N≤100,0001 \le N \le 100{,}000) 이 트리는 1번 정점, 2번 정점, ..., NN번 정점으로 구성된다.

두 번째 줄부터 NN번째 줄까지, 트리의 간선 정보를 의미하는 두 자연수 XX, YY가 공백으로 구분되어 주어진다. 이는 XX번 정점과 YY번 정점이 연결되어 있음을 의미한다. (1≤X,Y≤N1 \le X, Y \le N, X≠YX \neq Y)

주어지는 연결관계는 트리를 구성한다.

N+1N+1번째 줄에는 쿼리의 개수 QQ가 주어진다. (1≤Q≤100,0001 \le Q \le 100{,}000)

다음 QQ개의 줄에 걸쳐, 외심을 정의하기 위한 세 개의 정점 번호를 뜻하는 세 자연수 AA, BB, CC가 공백으로 구분되어 주어진다. (1≤A,B,C≤N1 \le A, B, C \le N)

출력

QQ개의 줄에 걸쳐 각 쿼리마다 입력으로 주어진 세 정점에 대해 트리의 외심이 존재하면 외심의 정점 번호를, 존재하지 않으면 -1을 출력한다.

예제3

  1. 예제 1

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

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

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