인용
면접 대비시간 제한1초메모리 제한1024 MB
책 1을 루트로 하는 인용 트리에서 모든 책의 반납 시각 합이 최소가 되도록 읽는 순서를 정한다.
문제
Grace는 과학책 한 권을 읽으려고 한다. 책을 끝까지 이해하기 위해 그 책이 인용한 모든 책을 읽고, 그 책들이 인용한 책들도 차례로 읽는다. 읽어야 할 책은 모두 권이며 번부터 번까지 번호가 있다. 책 를 실제로 읽고 반납하는 데는 분이 걸린다. 책 에는 권의 인용 목록이 들어 있다. 처음에 읽고 싶었던 책은 번이다. 번을 제외한 모든 책은 정확히 하나의 인용 목록에만 등장하며 인용 관계에 사이클이 없다. 따라서 인용 관계는 번을 루트로 하는 트리를 이룬다.
책 한 권을 읽는 절차는 다음과 같다.
- 책을 펴고 인용 목록을 읽는 데 분이 걸린다.
- 목록에 있는 책들을 자신이 정한 순서대로 모두 읽는다.
- 본문을 읽고 도서관에 반납하는 데 분이 걸린다.
모든 책은 시각 에 이미 빌린 상태이다. 책 의 대출 시간은 그 책을 반납하는 시각이다. 읽는 순서를 잘 정해 모든 책의 대출 시간 합을 최소로 하라.
입력
첫째 줄에 정수 이 주어진다 (). 다음 개의 줄에는 부터 까지 순서대로 책 의 정보가 주어진다. 각 줄은 (), (), 그리고 인용된 개의 책 번호로 이루어진다. 번을 제외한 모든 책 번호는 전체 입력에서 정확히 한 번만 인용 목록에 등장한다.
출력
모든 책의 대출 시간 합의 최솟값을 나타내는 양의 정수 하나를 출력한다.
힌트
모든 책을 시각 에 빌리므로 답은 각 책이 닫히는 시각들의 합과 같다. 한 책의 자식 서브트리들을 처리하는 데 걸리는 전체 시간은 순서와 무관하게 로 고정되며, 전체 처리 시간은 이다. 따라서 문제는 각 노드에서 자식들을 어떤 순서로 읽을지 정하는 문제로 귀결되며, 전체 합은 자식 서브트리 내부의 합에 자식들 사이의 대기 시간이 더해진 형태가 된다.