센트로이드 트리와 복원

월간 향유회 2025. 04-05. F번 BOJ 33840번
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 1024 MB67484276.364%

문제

어떤 정점을 제거했을 때 생기는 서브트리들의 크기 중, 가장 큰 서브트리의 크기를 최소로 만드는 정점을 그 트리의 센트로이드라고 한다. 어떤 트리든 센트로이드는 $1$개 또는 $2$개 존재하고, 트리의 정점 수가 홀수일 경우 그 트리의 센트로이드는 오직 하나만 존재함을 증명할 수 있다.

다음은 트리 $T$에 대해 센트로이드 트리 $T'$ 을 만드는 과정이다. 초기에 센트로이드 트리 $T'$은 간선이 없는 상태로 시작한다.

  1. 현재 트리에서 센트로이드 $C$를 찾아 제거한다.
  2. $C$를 제거한 뒤 나뉜 각 서브트리에 대해 센트로이드 $C'$를 구한다.
  3. 만약 $C'$의 후보가 여러 개라면, $C$와 가장 가까운 후보를 선택한다. $C$와 가장 가까운 후보는 유일함을 증명할 수 있다.
  4. 각 서브트리에 구한 $C'$와 이전 센트로이드 $C$를 연결하는 간선 $\{C,\ C'\}$을 센트로이드 트리 $T'$에 추가한다.
  5. 각 서브트리에 대해 1~4 과정을 반복하며, 모든 정점이 제거될 때까지 센트로이드 트리를 확장한다.

크기가 $N$인 트리 $T'$이 주어진다. 이 트리가 어떤 트리 $T$의 센트로이드 트리인 경우, 가능한 원래 트리 $T$를 출력하라. 존재하지 않는다면 -1을 출력하라.

트리 $T$가 존재한다면, 트리 $T$의 센트로이드는 오직 하나만 존재함이 보장된다.

입력

첫 번째 줄에 트리 $T'$의 정점의 수 $N$이 주어진다. $(3 \leq N \leq 99\ 999;$ $N$은 홀수$)$

두 번째 줄부터 $N - 1$개의 줄에 걸쳐 트리 $T'$의 간선 정보가 주어진다. 각 줄은 두 정점 $A$, $B$가 공백으로 구분되어 주어지며, 이는 트리 $T'$에서 두 정점 $A$와 $B$를 직접 연결하는 간선이 존재함을 의미한다. $(1 \leq A$, $B \leq N)$

출력

가능한 원래 트리 $T$의 간선 정보를 출력한다. 출력은 $N - 1$개의 줄로 이루어져야 하며, 각 줄에 두 정점 $A$, $B$를 공백으로 구분하여 출력한다. 이는 트리 $T$에서 두 정점 $A$와 $B$를 직접 연결하는 간선이 존재함을 의미한다. 가능한 트리가 여러 개인 경우, 그 중 임의의 트리를 하나 출력한다. $(1 \leq A, B \leq N)$

만약 가능한 $T$가 존재하지 않는다면 -1을 출력한다.

예제 입력 1

7
5 6
2 1
4 2
6 7
4 6
2 3

예제 출력 1

1 2
2 3
3 4
4 5
5 6
6 7
예제 입력 1 예제 출력 1

예제 입력 2

7
1 6
2 3
2 4
2 5
4 6
6 7

예제 출력 2

5 2
2 3
2 4
4 1
1 6
6 7
예제 입력 2 예제 출력 2

예제 입력 3

7
1 2
2 3
3 4
4 5
5 6
6 7

예제 출력 3

-1

출처

Contest > BOJ User Contest > 월간 향유회 > 월간 향유회 2025. 04-05. F번

  • 문제를 만든 사람: jthis
  • 문제를 검수한 사람: heeda0528, kiwiyou, snrnsidy, tony9402, utilforever