아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

스팸웨이 대파업

면접 대비

시간 제한1초메모리 제한128 MB

요약
양방향 연락이 가능한 좀비들로 루트 트리를 구성해, 각 좀비의 메시지 처리 지연을 반영한 요청·응답 왕복 시간이 최소가 되도록 만든다.
난이도

보통10점 중 7점

유형
트리, 동적 계획법, 그리디, 정렬
정답자
아직 제출이 없습니다

문제

스팸웨이(Spamway)는 좀비 컴퓨터로 이루어진 피라미드 조직을 이용해 상품 주문을 받고 처리하는 메시징 서비스이다. 그런데 모든 좀비가 더 좋은 RAM을 요구하며 파업에 들어갔다. 스팸웨이는 파업 기간에도 영업을 이어 가려고 대체 좀비들을 새로 고용했지만, 이 대체 좀비들은 조직력이 형편없어서 네트워크를 잘 구성하지 못한다.

당신의 임무는 대체 좀비들을 잘 조직하여, 스팸웨이가 한 번의 주문 라운드를 처리하는 데 걸리는 시간을 최소로 만드는 것이다. 구체적으로, 다음 두 조건을 만족하도록 각 좀비에게 부하 목록을 배정해야 한다.

  1. 우두머리 좀비를 제외한 모든 좀비는 정확히 한 명의 상급자를 가진다.
  2. 모든 좀비는 결국 우두머리 좀비에게 보고하게 된다.

한 번의 주문 라운드는 다음과 같이 진행된다. 우두머리 좀비는 자신의 모든 부하에게 동시에 "구매 주문 목록을 보내라"는 요청 메시지를 보낸다. 이런 요청을 받은 좀비는 자신의 모든 부하에게 똑같은 요청을 보낸다. 모든 부하로부터 답장을 받은 좀비는, 받은 목록들과 자신이 받은 구매 주문 목록을 하나로 합쳐서 자신의 상급자에게 보낸다.

좀비를 조직하기 위해 알아야 할 규칙은 다음과 같다.

  1. 한 좀비는 여러 개의 메시지를 동시에 보낼 수 있다.
  2. 모든 메시지는 목적지에 도착하는 데 1010초가 걸린다(모든 데이터는 고도로 압축되어 이 놀라운 효율을 낸다).
  3. 파업하지 않은 관리자가 한 명 있어 우두머리 좀비 역할을 한다. 이 관리자가 바로 지연 시간이 없는 우두머리 좀비 Z0Z_0이다.
  4. 모든 좀비는 셀룰러 모뎀으로 통신한다. 다만 신호가 약한 탓에 모든 좀비가 서로 통신할 수 있는 것은 아니다.
  5. 스팸웨이는 매우 검소해서, 관리자(우두머리 좀비 역할)를 포함하여 좀비를 최대 100100마리까지만 사용한다.
  6. 각 대체 좀비에게는 Z0,Z1,Z2,Z3,…Z_0, Z_1, Z_2, Z_3, \dots 과 같은 비밀 코드명이 붙는다. Z0Z_0이 우두머리 좀비이다.
  7. 대체 좀비는 훈련이 부족해서, 받은 메시지를 다 "읽는" 데 일정 시간이 걸린다. 이 지연 시간(좀비 대기 시간)은 좀비마다 다르며, 10001000초 미만의 음이 아닌 정수 초이다. 좀비는 여러 메시지를 동시에 읽을 수 있지만, 다 읽기 전에는 그 메시지에 따라 행동할 수 없다. 우두머리 좀비 Z0Z_0은 지연 시간이 없다.

또한 상급자-부하 관계가 성립하려면 두 좀비가 서로 안정적으로 연락할 수 있어야 한다. 상급자는 부하에게 요청을 보내야 하고, 부하는 상급자에게 답장을 보내야 하기 때문이다.

입력

첫 번째 줄에 새로 고용된 대체 좀비의 수 nn이 주어진다 (1≤n≤991 \le n \le 99). 관리자(우두머리 좀비)는 이 수에 포함되지 않는다.

이어서 n+1n + 1개의 줄이 주어진다. 각 줄에는 한 좀비의 좀비 대기 시간, 그 좀비가 안정적으로 연락할 수 있는 좀비의 수, 그리고 그 좀비들의 번호 목록이 순서대로 주어진다. 첫 번째 줄은 우두머리 좀비 Z0Z_0을 설명하고, 이후 nn개의 줄은 순서대로 Z1Z_1부터 ZnZ_n까지를 설명한다. 각 번호는 00부터 nn 사이의 정수로, 해당 좀비의 코드명에 붙은 숫자이다.

출력

한 번의 주문 라운드에서 데이터를 보내고 받는 데 필요한 총 시간을 하나의 정수로 출력한다. 여러 가지 조직 방법이 있을 수 있는데, 그중 최적인 방법에 대한 시간을 구해서 출력해야 한다.

설명

아래 예제를 살펴보자. 이 예제에서 가능한 조직은 하나뿐이다. Z0Z_0의 부하는 Z1Z_1과 Z3Z_3이고, Z1Z_1과 Z2Z_2에게는 부하가 없으며, Z3Z_3의 유일한 부하는 Z2Z_2이다.

Z0Z_0이 주문 라운드를 시작하는 시각을 00이라 하자. Z0Z_0은 Z1Z_1과 Z3Z_3에게 요청을 보낸다. 시각 1010에 Z1Z_1과 Z3Z_3이 메시지를 받는다. Z3Z_3은 메시지를 읽는 데 33초가 걸려 시각 1313에 다 읽고, 부하인 Z2Z_2에게 요청을 보낸다. 시각 2323에 Z2Z_2가 Z3Z_3의 메시지를 받고 77초 동안 읽어 시각 3030에 마친다. Z2Z_2에게는 부하가 없으므로 곧바로 자신의 주문 목록을 상급자 Z3Z_3에게 보낸다. 시각 4040에 Z3Z_3이 그 목록을 받고 33초 동안 읽어 시각 4343에 마친 뒤, Z2Z_2의 목록과 자신의 목록을 합쳐 Z0Z_0에게 보내고, 시각 5353에 도착한다. 한편 Z1Z_1은 시각 1010에 받은 Z0Z_0의 메시지를 5050초 동안 읽어 시각 6060에 마치고, 곧바로 자신의 주문 목록을 Z0Z_0에게 보내 시각 7070에 도착한다. 이 메시지를 받은 순간 Z0Z_0은 스팸웨이로 들어온 모든 구매 주문을 갖게 되며, 주문 라운드가 끝난다. 따라서 총 시간은 7070이다.

예제3

  1. 예제 1

    입력
    3
    0 2 1 3
    50 1 0
    7 1 3
    3 2 0 2
    
    예상 출력
    70
    
  2. 예제 2

    입력
    1
    0 1 1
    5 1 0
    
    예상 출력
    25
    
  3. 예제 3

    입력
    3
    0 3 1 2 3
    10 1 0
    20 1 0
    30 1 0
    
    예상 출력
    50