만드는 중입니다

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

놀라운 트리

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

요약
트리가 주어졌을 때 시작 정점과 이웃 방문 순서를 정해 후위 순회 결과가 사전순으로 가장 작아지도록 출력합니다.
난이도

보통10점 중 6점

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

문제

무방향 트리가 주어진다. 다음 알고리즘은 트리의 후위 순회(post-order)를 만든다:

fun dfs(v):
    mark v as used
    for u in neighbours(v):
        if u is not used:
            dfs(u)
    append v to order

후위 순회 결과는 리스트 order에 담긴다. 각 정점의 이웃을 방문하는 순서와 시작 정점을 자유롭게 고를 수 있다. 얻을 수 있는 order 중 사전순으로 가장 작은 것을 구하라.

입력

첫 줄에 테스트 케이스의 수 TT (1≤T≤1051 \le T \le 10^{5})가 주어진다. 각 테스트 케이스의 첫 줄에는 정점의 수 nn (2≤n≤2⋅1052 \le n \le 2 \cdot 10^{5})이 주어진다. 이어지는 n−1n-1개의 줄에는 각각 두 정수 ui,viu_i, v_i (1≤ui,vi≤n1 \le u_i, v_i \le n, ui≠viu_i \ne v_i)가 주어지며, 이는 uiu_i와 viv_i를 잇는 무방향 간선을 뜻한다. 주어진 그래프는 트리이다. 모든 테스트 케이스의 nn을 합하면 2⋅1052 \cdot 10^{5}을 넘지 않는다.

출력

각 테스트 케이스마다 사전순으로 가장 작은 order를 한 줄에 출력한다.

힌트

첫 번째 테스트는 다음과 같다:

정점 1에서 시작하면 2 3 1 순서만 얻을 수 있다. 정점 2에서 시작하면 1 3 2 순서만 얻을 수 있다. 정점 3에서 시작하면 1 2 3과 2 1 3 두 가지 순서를 얻을 수 있다. 네 가지 순서 중 사전순으로 가장 작은 것은 1 2 3이다.

두 번째 테스트는 다음과 같다:

정점 1에서 시작하면 2 3 1과 3 2 1 두 가지 순서를 얻을 수 있다. 정점 2에서 시작하면 3 1 2 순서만 얻을 수 있다. 정점 3에서 시작하면 2 1 3 순서만 얻을 수 있다. 네 가지 순서 중 사전순으로 가장 작은 것은 2 1 3이다.

세 번째 테스트는 다음과 같다:

사전순으로 가장 작은 순서는 4 5 2 1 6 3 7이며, 정점 7에서 시작하면 얻을 수 있다.

예제1

  1. 예제 1

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