Designing a Tree

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

요약
각 정점 i(1부터 N-1까지)마다 [L_i, R_i] 범위에서 j_i를 골라 N-1개의 간선이 트리를 이루도록 하거나, 불가능하면 NO를 출력한다.
난이도

어려움10점 중 8점

유형
그리디, 유니온 파인드, 그래프, 구현
정답자
아직 제출이 없습니다

문제

NN개의 정점으로 이루어진 그래프가 주어진다. 각 정점은 11부터 NN까지 순서대로 번호가 매겨져 있고, 초기에는 각 정점 사이에 간선이 없다.

이때, 각 i(1≤i≤N−1)i(1≤i≤N-1)번 정점에 대해 L_i≤j_i≤R_i(1≤L_i≤R_i≤N)L\_i≤j\_i≤R\_i(1≤L\_i≤R\_i≤N)인 j_ij\_i를 골라서 ii번 정점과 j_ij\_i번 정점을 연결하는 무향 간선을 추가할 수 있다.

j_ij\_i를 적절히 골라서 그래프를 트리로 만드는 프로그램을 작성해 보자.

입력

첫째 줄에 NN이 주어진다. (2≤N≤500,000)(2≤N≤500\\, 000)

둘째 줄부터 N−1N-1개의 줄에 걸쳐 순서대로, 두 정수 L_iL\_i, R_iR\_i가 공백으로 구분되어 주어진다. (1≤L_i≤R_i≤N)(1≤L\_i≤R\_i≤N)

출력

그래프를 트리로 만들 수 없다면 첫째 줄에 NO를 출력한다.

그래프를 트리로 만들 수 있다면 첫째 줄에 YES를 출력한다. 둘째 줄에는 N−1N-1개의 정수를 공백으로 구분해서 출력한다. ii번째 정수는 j_ij\_i를 의미한다. 정답이 여러 개라면 그중 하나만 출력한다.

힌트

트리는 무방향 사이클이 없는 연결 그래프를 의미한다.

예제3

  1. 예제 1

    입력
    5
    2 3
    2 4
    1 1
    4 5
    
    예상 출력
    YES
    2 4 1 5
    
  2. 예제 2

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

    입력
    5
    1 5
    1 5
    1 5
    1 5
    
    예상 출력
    YES
    2 4 5 3