만드는 중입니다

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

나무 위의 구슬

면접 대비

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

요약
루트 있는 순서 이진 트리에서 K번째 구슬이 멈추는 리프를 찾는다. 두 자식이 있는 노드에서 구슬은 왼쪽 서브트리에 멈춘 구슬 수가 오른쪽 이하이면 왼쪽으로, 아니면 오른쪽으로 내려간다.
난이도

보통10점 중 6점

유형
트리, DFS, 시뮬레이션, 이분 탐색
정답자
아직 제출이 없습니다

문제

이진 트리는 모든 노드의 자식이 2개 이하인 트리이다. 그림의 각 노드에 적힌 수는 노드 번호이다.

이 문제에서 다루는 이진 트리는 루트가 1번 노드로 고정되어 있고, 자식의 순서가 중요하다. 어떤 서브트리에서도 왼쪽과 오른쪽을 바꿀 수 없다.

루트에 구슬을 하나 올려놓으면 구슬은 다음 과정을 거쳐 떨어진다.

  1. 구슬이 놓인 노드에 자식이 없으면 그 자리에서 멈춘다.
  2. 자식이 하나뿐이면 그 자식으로 떨어진다.
  3. 자식이 둘이면, 왼쪽 서브트리에 쌓인 구슬의 수가 오른쪽 서브트리에 쌓인 구슬의 수보다 작거나 같을 때 왼쪽 자식으로 떨어지고, 그 외에는 오른쪽 자식으로 떨어진다.
  4. 구슬이 멈출 때까지 위 과정을 되풀이한다.

구슬은 결국 단말 노드에 쌓인다. 구슬은 한 번에 하나씩 떨어뜨리며, 앞의 구슬이 멈춘 뒤에 다음 구슬을 루트에 올려놓는다.

그림과 같은 트리에 구슬을 차례로 떨어뜨리면 첫 다섯 개의 구슬은 2번, 4번, 2번, 5번, 2번 노드에서 멈춘다.

트리가 작거나 구슬이 적으면 직접 시뮬레이션해서 멈추는 자리를 알아낼 수 있다. 큰 트리에 구슬을 아주 많이 떨어뜨리는 경우에도 빠르게 답을 구해야 한다.

이진 트리와 KK가 주어질 때, KK번째 구슬이 멈추는 노드의 번호를 구하라.

입력

첫 줄에 이진 트리의 노드 수 NN이 주어진다. (1≤N≤2000001 \le N \le 200000)

다음 NN개의 줄 중 ii번째 줄에는 두 정수 UU와 VV가 주어진다. UU는 ii번 노드의 왼쪽 자식이고 VV는 ii번 노드의 오른쪽 자식이다. UU가 −1-1이면 왼쪽 자식이 없고, VV가 −1-1이면 오른쪽 자식이 없다. −1-1이 아닌 값은 항상 2≤U,V≤N2 \le U, V \le N을 만족한다.

마지막 줄에 KK가 주어진다. (1≤K≤10181 \le K \le 10^{18})

주어지는 트리는 항상 올바른 이진 트리이며, 루트는 1번 노드이다.

출력

KK번째 구슬이 멈추는 노드의 번호를 출력한다.

예제2

  1. 예제 1

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

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