만드는 중입니다

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

거리 코드

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

요약
트리의 잎 노드를 제거하는 순서를 출력하는 인코더와, 연속으로 제거된 노드 사이 거리로 동형 트리를 복원하는 디코더를 작성합니다.
난이도

어려움10점 중 8점

유형
트리, 구현, BFS
정답자
아직 제출이 없습니다

문제

여러분의 과제는 인코더와 디코더, 두 가지 방식으로 쓸 수 있는 프로그램을 만드는 것이다.

인코더는 nn개의 노드로 이루어진 트리를 받아 모든 노드를 트리에서 제거한다. 매 단계마다 인코더는 현재 트리에서 임의의 리프 노드 하나를 제거할 수 있다.

디코더는 인코더가 연속으로 제거한 노드 사이의 거리 목록을 받는다. 디코더는 이 목록으로 원래 트리의 구조를 복원해야 한다. 디코더가 만드는 트리는 원래 트리와 같은 구조(정확히는 원래 트리와 동형)이기만 하면 어떤 트리든 된다.

입력

첫 줄에는 정수 tt가 주어진다. tt는 1(인코더) 또는 2(디코더)이다.

둘째 줄에는 트리의 노드 개수 nn이 주어진다. 노드는 1,2,…,n1,2,\dots,n으로 번호가 매겨져 있다.

t=1t=1이면 이어서 트리를 설명하는 n−1n-1개의 줄이 주어진다. 각 줄에는 정수 aa와 bb가 주어지며, 이는 노드 aa와 노드 bb 사이에 간선이 있다는 뜻이다.

t=2t=2이면 n−1n-1개의 정수가 한 줄에 주어진다. 이 정수들은 인코더가 연속으로 제거한 노드 사이의 거리이다.

출력

t=1t=1이면 인코더는 1,2,…,n1,2,\dots,n의 순열을 출력해야 한다. 이 순열은 노드가 트리에서 제거된 순서이다.

t=2t=2이면 디코더는 트리의 구조를 설명하는 n−1n-1개의 줄을 출력해야 한다.

예제2

  1. 예제 1

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

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