만드는 중입니다

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

트리 스도쿠

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

요약
트리의 각 정점에 A의 원소를 하나씩 서로 다르게 배정해, 인접한 두 정점의 합이 모두 다르도록 만들 수 있는지 판단합니다.
난이도

보통10점 중 7점

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

문제

평범한 방식의 스도쿠에 질린 룰루는 새로운 방식의 스도쿠를 제안했다.

  1. NN개의 정점으로 이루어진 트리와 NN개의 정수로 이루어진 수열 AA가 주어진다. 수열 AA의 ii번째 원소는 AiA_i이며, 수열 AA의 원소는 모두 서로 다른 값이다.
  2. 트리의 모든 정점과 수열의 모든 원소를 일대일로 대응시킨다. 즉, 각 정점은 수열의 원소 하나와 대응되며, 대응되는 원소끼리는 서로 달라야 한다.
  3. 각 정점은 대응된 원소의 값을 자신의 값으로 정한다. 이때 인접한 모든 두 정점의 값의 합은 서로 달라야 한다. 다시 말해, 트리에서 인접한 어떤 두 정점의 합은 인접한 다른 모든 두 정점의 합과 달라야 한다.

입력

첫 번째 줄에 정수 NN이 주어진다. (2≤N≤111,2222 \leq N \leq 111{,}222)

두 번째 줄에 수열 A1,A2,⋯ ,ANA_1, A_2, \cdots, A_N이 공백을 사이에 두고 순서대로 주어진다. (−109≤Ai≤109-10^9 \leq A_i \leq 10^9, 수열 AA의 원소는 모두 서로 다른 정수다.)

다음 N−1N-1개의 줄에 트리의 간선이 a b 형식으로 주어진다. 이는 aa번 정점과 bb번 정점을 잇는 간선이 있다는 뜻이다. (1≤a,b≤N1 \leq a, b \leq N)

출력

첫 번째 줄에 인접한 두 정점의 값의 합이 모두 다르도록 일대일로 대응시키는 방법이 존재하면 YES, 그렇지 않으면 NO를 출력한다.

방법이 존재하면 다음 줄에 트리의 각 정점과 대응할 수열의 원소 번호를 정점 번호 순서대로 공백을 사이에 두고 출력한다.

가능한 방법이 여러 가지라면 그중 아무거나 출력한다.

예제1

  1. 예제 1

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