페이지를 불러오는 중…
해결한 사람
0
명
정답률
0.00
%
시간 제한
2000
ms
메모리 제한
1024
MB
번 정점부터 번 정점까지 개의 정점으로 이루어진 루트 있는 트리가 있다. 이 트리의 루트 정점은 번 정점이고, 번 정점의 부모 정점은 번 정점이다(). 또한 각 정점은 서로 다른 정수 가중치를 갖고 있다. 이때 번 정점의 가중치는 이다(). 자식을 가지지 않은 정점을 리프 정점이라고 한다.
루트 정점인 번 정점에서 출발하여 자식 중에 가중치가 가장 작은 정점으로 이동하는 것을 반복하자. 리프 정점에 도달할 때까지 이를 반복하면 번 정점에서 시작하여 리프 정점에서 끝나는 경로 를 얻을 수 있다. 이때 를 특별한 경로라고 정의한다.
또한, 뽑아내기 연산을 다음과 같이 정의한다.
뽑아내기:
즉, 뽑아내기 연산은 특별한 경로 위에 있는 정점들의 가중치를 경로 상에서 자신 다음에 등장하는 정점의 가중치로 수정하고, 특별한 경로의 마지막에 위치한 리프 정점을 제거하는 연산이다.
예를 들어, 아래와 같은 트리들을 생각하자. 원 밖의 수는 정점의 번호를 나타내고, 원 안의 수는 그 정점의 가중치를 나타낸다.

첫 번째 트리의 특별한 경로를 찾아보자. 루트 정점인 번 정점에서 출발하여 번 정점의 자식 중 가중치가 가장 작은 번 정점으로 이동하고, 번 정점의 자식 중 가중치가 가장 작은 번 정점으로 이동한다. 번 정점은 리프 정점이기 때문에 특별한 경로가 임을 알 수 있다. 이제 이 트리에 뽑아내기 연산을 적용하면 번 정점과 번 정점의 가중치를 교환하고, 번 정점과 번 정점의 가중치를 교환한 뒤 번 정점을 트리에서 제거하여 두 번째 트리와 같은 모양이 된다.
두 번째 트리의 특별한 경로를 찾아보자. 루트 정점인 번 정점에서 시작하여 번 정점의 자식 중 가중치가 가장 작은 번 정점으로 이동한다. 번 정점이 리프 정점이기 때문에 특별한 경로가 임을 알 수 있다. 이제 이 트리에 뽑아내기 연산을 적용하면 번 정점과 번 정점의 가중치를 교환한 뒤 번 정점을 트리에서 제거하여 세 번째 트리와 같은 모양이 된다.
세 번째 트리의 특별한 경로를 찾아보자. 루트 정점인 번 정점에서 시작하여 번 정점의 유일한 자식인 번 정점으로 이동하고, 번 정점의 유일한 자식인 번 정점으로 이동한다. 번 정점이 리프 정점이기 때문에 특별한 경로가 임을 알 수 있다. 이제 이 트리에 뽑아내기 연산을 적용하면 번 정점과 번 정점의 가중치를 교환하고, 번 정점과 번 정점의 가중치를 교환한 뒤 번 정점을 트리에서 제거하여 네 번째 트리와 같은 모양이 된다.
마찬가지로 네 번째 트리의 특별한 경로는 이다. 이 트리에 뽑아내기 연산을 적용하면 번 정점과 번 정점의 가중치를 교환한 뒤 번 정점을 트리에서 제거하여 다섯 번째 트리와 같은 모양이 된다.
마지막으로 다섯 번째 트리의 특별한 경로는 이며, 뽑아내기 연산을 적용하면 번 정점이 트리에서 제거된다.
이와 같이 우리는 주어진 트리에 뽑아내기 연산을 번 수행하려고 한다. 이때, 각 뽑아내기 연산을 수행하기 전에 번 정점에 적혀 있던 가중치의 값을 모두 구하는 프로그램을 작성하라.
| 번호 | 배점 | 제한 |
|---|---|---|
| 1 | 6 | |
| 2 | 10 | 를 만족하는 모든 에 대해 이다. |
| 3 | 11 | 를 만족하는 모든 에 대해 이다. |
| 4 | 23 | 차수가 이상인 정점의 수가 개 이하이다. |
| 5 | 50 | 추가 제약 조건 없음. |
첫 번째 줄에 정수 이 주어진다.
두 번째 줄에 개의 정수 이 공백을 사이에 두고 주어진다.
세 번째 줄에 개의 정수 이 공백을 사이에 두고 주어진다.
첫 번째 줄부터 개의 줄에 걸쳐 답을 출력한다. 이 중 번째 줄에는 번째 뽑아내기 연산을 수행하기 전 번 정점에 적혀 있던 가중치의 값을 출력한다.
5
1 1 3 3
5 2 1 3 4
5
1
2
3
4
로그인 상태를 확인하는 중입니다.