시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 (추가 시간 없음) 1024 MB (추가 메모리 없음)110292331.507%

문제

$1$번부터 $N$번까지 총 $N$개의 정점으로 이루어진 트리와 $1$번부터 $N$번까지의 서로 다른 번호가 붙어있는 $N$개의 스티커가 주어진다. 트리는 $1$번 정점을 루트로 한다. 심심했던 동건이는 각 정점에 스티커를 붙이려고 한다. 다만, 아무 규칙 없이 스티커를 붙이는 건 너무 시시하기 때문에 부모 정점의 스티커 번호가 자식 정점의 스티커 번호보다 크도록 붙이려고 한다.

그런데 동건이에게 악감정이 있던 원빈이는 일부 정점에 스티커를 미리 붙여버렸다. 계획이 틀어진 동건이는 크게 당황했는데, 동건이를 도와 위 규칙에 맞게 나머지 스티커를 모두 붙일 수 있는지 구해보자.

입력

첫 번째 줄에는 정점의 개수 $N$이 주어진다. ($2 \le N \le 10^5$)

두 번째 줄에는 $N$개의 정수 $a_1$, ..., $a_n$이 주어진다. $a_i$는 $i$번 정점의 상태를 나타내는데, $a_i=0$인 경우는 아직 스티커를 붙이지 않은 상태를, $1 \le a_i \le N$인 경우는 $i$번 번호의 스티커가 붙여진 상태를 의미한다. $1$ 이상 $N$ 이하의 정수는 각각 최대 한 번만 주어진다.

세 번째 줄부터 $N-1$개의 줄에 걸쳐 트리의 정보를 나타내는 두 정수 $u$, $v$가 공백으로 구분되어 주어지는데, 이는 $u$번 정점과 $v$번 정점을 잇는 간선이 존재한다는 의미이다. ($1 \le u, v \le N, u \ne v$)

출력

위 규칙에 맞게 스티커를 모두 붙일 수 없다면 첫 줄에 NO를 출력한다.

위 규칙에 맞게 스티커를 모두 붙일 수 있다면 첫 줄에 YES를 출력하고 둘째 줄에 $N$개의 정점에 붙인 스티커의 번호를 공백으로 구분하여 $1$번 정점부터 $N$번 정점까지 순서대로 출력한다.

만약 스티커를 붙일 수 있는 방법이 여러 개라면 그중 아무거나 출력한다.

예제 입력 1

12
12 10 0 2 9 5 0 0 0 0 0 0
1 2
1 3
2 4
2 5
3 6
4 7
5 8
6 9
6 10
8 11
8 12

예제 출력 1

YES
12 10 11 2 9 5 1 8 3 4 6 7

예제 입력 2

6
0 3 4 0 0 0
1 2
1 3
2 4
2 5
3 6

예제 출력 2

NO

출처

University > 서강대학교 > Sogang Programming Contest > 2024 Sogang Programming Contest > Champion G번