제거로 균형 맞추기
시간 제한3초메모리 제한2048 MB
이진 트리에서 리프 노드를 최대 하나 제거해 모든 노드의 높이 차이가 2 미만이 되도록 하는 문제입니다. 이미 균형이면 balanced, 불가능하면 impossible을 출력합니다.
문제
노드가 개인 이진 트리가 주어진다. 노드는 부터 까지 번호가 매겨져 있으며, 노드 이 루트이다.
노드 를 루트로 하는 서브트리의 높이는 로 정의한다. 자식이 없으면 그 서브트리의 높이는 이다. 따라서 리프 노드의 높이는 이다.
노드가 높이 균형을 이룬다는 것은 를 만족한다는 뜻이다. 모든 노드가 높이 균형을 이루면 그 이진 트리는 높이 균형 상태이다.
리프 노드를 최대 하나 제거해서 트리를 높이 균형 상태로 만들거나, 그것이 불가능하다고 보고하라. 예를 들어 두 번째 예제 입력의 트리(그림 B.1)는 노드 를 제거하면 균형이 된다.
입력
첫 줄에 노드의 개수를 나타내는 정수 ()이 주어진다. 이어서 개의 줄이 주어지며, 번째 줄에는 노드 의 왼쪽 자식과 오른쪽 자식 번호가 주어진다. 자식이 없으면 으로 주어진다. 입력 그래프는 이진 트리임이 보장된다.
출력
트리가 이미 균형 상태이면 "balanced"를 출력한다. 높이 균형 상태로 만드는 것이 불가능하면 "impossible"을 출력한다. 그 외에는 제거할 리프 노드의 번호를 출력한다.
힌트

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