가장 가까운 공통 조상

면접 대비

시간 제한1초메모리 제한128 MB

요약
루트가 있는 트리와 두 정점이 주어질 때 각 테스트케이스마다 두 정점의 최근접 공통 조상을 구합니다.
난이도

보통10점 중 4점

유형
트리, DFS, 연결 리스트
정답자
아직 제출이 없습니다

문제

루트가 있는 트리(rooted tree)와 그 트리 위의 두 정점이 주어질 때, 두 정점의 가장 가까운 공통 조상(Nearest Common Ancestor, NCA)은 다음과 같이 정의됩니다.

  • 두 정점의 가장 가까운 공통 조상이란, 두 정점을 모두 자손으로 가지는 정점들 중에서 깊이가 가장 깊은(즉 두 정점에 가장 가까운) 정점입니다. 이때 각 정점은 자기 자신의 조상이기도 한 것으로 봅니다.

nca.png

예를 들어 위 그림에서 15와 11을 모두 자손으로 가지는 정점으로는 4와 8이 있지만, 그중 깊이가 가장 깊은(15와 11에 가장 가까운) 정점은 4이므로 가장 가까운 공통 조상은 4입니다.

루트가 있는 트리와 두 정점이 주어질 때, 두 정점의 가장 가까운 공통 조상을 구하는 프로그램을 작성하세요.

입력

첫째 줄에 테스트 케이스의 개수 T가 주어집니다.

각 테스트 케이스는 다음과 같이 구성됩니다.

  • 첫째 줄에 트리를 구성하는 정점의 수 N이 주어집니다. (2 ≤ N ≤ 10,000)
  • 다음 N-1개의 줄에는 트리의 간선 정보가 한 줄에 하나씩 주어집니다. 각 줄에는 두 정수 A B가 주어지며, 이는 A가 B의 부모라는 뜻입니다. (정점이 N개인 트리는 항상 N-1개의 간선으로 이루어집니다.) 모든 정점은 1 이상 N 이하의 정수로 번호가 매겨집니다.
  • 마지막 줄에는 가장 가까운 공통 조상을 구할 두 정점의 번호가 주어집니다.

출력

각 테스트 케이스마다 주어진 두 정점의 가장 가까운 공통 조상을 한 줄에 하나씩 출력합니다.

예제8

  1. 예제 1

    입력
    2
    16
    1 14
    8 5
    10 16
    5 9
    4 6
    8 4
    4 10
    1 13
    6 15
    10 11
    6 7
    10 2
    16 3
    8 1
    16 12
    16 7
    5
    2 3
    3 4
    3 1
    1 5
    3 5
    
    예상 출력
    4
    3
    
  2. 예제 2

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

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

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

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

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

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

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