| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1 초 (추가 시간 없음) | 1024 MB (추가 메모리 없음) | 110 | 29 | 23 | 31.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$번 정점까지 순서대로 출력한다.
만약 스티커를 붙일 수 있는 방법이 여러 개라면 그중 아무거나 출력한다.
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
YES 12 10 11 2 9 5 1 8 3 4 6 7
6 0 3 4 0 0 0 1 2 1 3 2 4 2 5 3 6
NO