만드는 중입니다

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

제거로 균형 맞추기

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

요약
이진 트리에서 리프 노드를 최대 하나 제거해 모든 노드의 높이 차이가 2 미만이 되도록 하는 문제입니다. 이미 균형이면 balanced, 불가능하면 impossible을 출력합니다.
난이도

보통10점 중 6점

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

문제

노드가 nn개인 이진 트리가 주어진다. 노드는 11부터 nn까지 번호가 매겨져 있으며, 노드 11이 루트이다.

노드 uu를 루트로 하는 서브트리의 높이는 hu=1+max⁡(h왼쪽 자식,h오른쪽 자식)h_u = 1 + \max(h_{\text{왼쪽 자식}}, h_{\text{오른쪽 자식}})로 정의한다. 자식이 없으면 그 서브트리의 높이는 00이다. 따라서 리프 노드의 높이는 11이다.

노드가 높이 균형을 이룬다는 것은 ∣h왼쪽 자식−h오른쪽 자식∣<2|h_{\text{왼쪽 자식}} - h_{\text{오른쪽 자식}}| < 2를 만족한다는 뜻이다. 모든 노드가 높이 균형을 이루면 그 이진 트리는 높이 균형 상태이다.

리프 노드를 최대 하나 제거해서 트리를 높이 균형 상태로 만들거나, 그것이 불가능하다고 보고하라. 예를 들어 두 번째 예제 입력의 트리(그림 B.1)는 노드 55를 제거하면 균형이 된다.

입력

첫 줄에 노드의 개수를 나타내는 정수 nn (1≤n≤1051 \le n \le 10^5)이 주어진다. 이어서 nn개의 줄이 주어지며, ii번째 줄에는 노드 ii의 왼쪽 자식과 오른쪽 자식 번호가 주어진다. 자식이 없으면 00으로 주어진다. 입력 그래프는 이진 트리임이 보장된다.

출력

트리가 이미 균형 상태이면 "balanced"를 출력한다. 높이 균형 상태로 만드는 것이 불가능하면 "impossible"을 출력한다. 그 외에는 제거할 리프 노드의 번호를 출력한다.

힌트

그림 B.1: 예제 입력 2의 시각화.

예제3

  1. 예제 1

    입력
    4
    4 2
    0 0
    0 0
    0 3
    
    예상 출력
    balanced
    
  2. 예제 2

    입력
    5
    2 3
    0 0
    0 4
    0 5
    0 0
    
    예상 출력
    5
    
  3. 예제 3

    입력
    4
    2 0
    3 0
    4 0
    0 0
    
    예상 출력
    impossible