Tri-Tree XOR

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

요약
정점 N개인 트리 A가 주어질 때, 두 간선 집합의 대칭차가 다시 트리가 되는 트리 B를 찾아 출력하거나 존재하지 않으면 NO를 출력한다.
난이도

어려움10점 중 8점

유형
트리, 그래프, 수학, 조합론
정답자
아직 제출이 없습니다

문제

정점 번호가 1,2,⋯ ,N1, 2, \cdots, N인 NN개 정점으로 이루어진 그래프 AA, BB가 있다고 할 때 두 그래프 사이 XOR 연산을 아래와 같이 수행한다.

  • 정점 번호가 1,2,⋯ ,N1, 2, \cdots, N인 NN개 정점이 있고 간선이 없는 그래프 CC를 만든다.
  • 1≤i\<j≤N1\le i\<j\le N인 모든 정수 ii, jj 쌍에 대해 정점 ii와 정점 jj를 잇는 간선이 그래프 AA와 그래프 BB 중 정확히 하나에만 존재한다면 그래프 CC에서 정점 ii와 정점 jj를 간선으로 연결한다.

정점이 NN개인 트리 AA가 주어질 때 정점이 NN개인 적당한 트리 BB를 만들어서 AA와 BB의 XOR 연산 결과인 그래프 CC가 트리가 되는 BB가 존재하는지 확인하고, 존재한다면 가능한 트리 BB를 하나 구해보자.

입력

첫째 줄에 트리 AA의 정점의 수 NN이 주어진다. (2≤N≤300,0002 \le N \le 300\\,000)

둘째 줄부터 N−1N-1개 줄에 걸쳐 트리 AA에서 간선으로 연결된 두 정점의 번호가 공백을 기준으로 구분되어 주어진다.

출력

첫째 줄에 트리 AA와 XOR 연산한 결과가 트리가 되는 트리 BB가 존재한다면 YES, 존재하지 않는다면 NO를 출력한다.

가능한 트리 BB가 존재한다면 간선으로 연결된 두 정점의 번호를 공백을 기준으로 구분하여 둘째 줄부터 N−1N-1개 줄에 걸쳐 출력한다.

예제2

  1. 예제 1

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

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