만드는 중입니다

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

이진 탐색 트리

시간 제한2초메모리 제한512 MB

요약
정점이 n개인 트리가 주어질 때, 정점 번호를 키로 하는 이진 탐색 트리의 루트가 될 수 있는 정점을 모두 찾거나 불가능하면 -1을 출력합니다.
난이도

보통10점 중 7점

유형
트리, 동적 계획법, DFS
정답자
아직 제출이 없습니다

문제

트리가 이진 탐색 트리인지 어떻게 확인할까?

텔레그램 채팅방의 한 사람

이진 탐색 트리는 뿌리가 있는 트리이며 다음 조건을 만족한다.

  • 각 정점은 왼쪽 자식을 최대 하나, 오른쪽 자식을 최대 하나 가진다.
  • 리프가 아닌 각 정점 xx에 대해, 왼쪽 부분 트리의 모든 정점은 xx보다 작고, 오른쪽 부분 트리의 모든 정점은 xx보다 크다.

정점이 nn개인 트리가 주어진다. 이 트리를 어떤 정점을 뿌리로 하여 이진 탐색 트리로 만들 수 있는지 확인하라. 만들 수 있다면 뿌리가 될 수 있는 정점을 모두 구하라.

입력

첫째 줄에 트리의 정점 개수 nn (1≤n≤5000001 \le n \le 500000)이 주어진다.

이어지는 n−1n - 1개의 줄에는 트리의 간선을 나타내는 정수 두 개 uiu_i, viv_i (1≤ui,vi≤n1 \le u_i, v_i \le n)가 한 줄에 하나씩 주어진다.

출력

트리를 이진 탐색 트리로 만들 수 없으면 -1을 출력한다.

그렇지 않으면 뿌리가 될 수 있는 정점을 모두 오름차순으로 출력한다.

예제4

  1. 예제 1

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

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

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

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