트리 채우기
면접 대비시간 제한1초메모리 제한1024 MB
루트가 1인 트리에서 일부 정점에 붙은 스티커를 바탕으로 남은 스티커를 부모의 번호가 자식보다 크도록 채울 수 있는지 판별하고, 가능하면 한 가지 배치를 출력합니다.
문제
번부터 번까지 총 개의 정점으로 이루어진 트리와 번부터 번까지 서로 다른 번호가 붙은 개의 스티커가 주어진다. 트리는 번 정점을 루트로 한다. 동건이는 각 정점에 스티커를 하나씩 붙이려고 한다. 단, 부모 정점의 스티커 번호는 자식 정점의 스티커 번호보다 커야 한다.
원빈이가 일부 정점에 스티커를 미리 붙여 두었다. 동건이를 도와 위 규칙에 맞게 나머지 스티커를 모두 붙일 수 있는지 구해보자.
입력
첫 번째 줄에 정점의 개수 이 주어진다. ()
두 번째 줄에 개의 정수 이 주어진다. 이면 번 정점에 아직 스티커가 없다는 뜻이다. 이면 번 정점에 번호 의 스티커가 붙어 있다는 뜻이다. 이상 이하의 정수는 각각 최대 한 번만 주어진다.
세 번째 줄부터 개의 줄에 트리의 간선 정보가 주어진다. 각 줄에는 두 정수 , 가 공백으로 구분되어 있으며, 번 정점과 번 정점을 잇는 간선이 있다는 뜻이다. ()
출력
위 규칙에 맞게 스티커를 모두 붙일 수 없으면 첫 줄에 NO를 출력한다.
붙일 수 있으면 첫 줄에 YES를 출력하고, 둘째 줄에 번 정점부터 번 정점까지 순서대로 각 정점에 붙인 스티커 번호를 공백으로 구분하여 출력한다.
방법이 여러 개라면 그중 아무거나 출력한다.