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

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

슈퍼컴퓨터

시간 제한2초메모리 제한256 MB

요약
단위 시간 작업으로 이루어진 루트 트리와 프로세서 수가 여럿 주어질 때 각 경우의 최소 완료 시간을 구합니다.
난이도

어려움10점 중 8점

유형
트리, 누적 합, 수학, 그리디
정답자
아직 제출이 없습니다

문제

Byteasar는 새로운 구조의 슈퍼컴퓨터를 설계했다. 동일한 처리 장치를 여러 개 두며, 각 장치는 한 시간 단위에 명령 하나를 실행한다.

프로그램은 순차적이 아니라 트리 구조다. 각 명령은 0개, 1개, 또는 여러 개의 후속 명령을 가질 수 있으며, 자신이 그 부모 명령이다.

명령은 사용 가능한 모든 처리 장치에서 병렬 실행할 수 있다. 단, 부모 명령이 먼저 실행된 뒤에만 자식 명령을 실행할 수 있다. 이미 실행된 명령의 자식들은 처리 장치 수만큼 동시에 실행할 수 있다.

주어진 프로그램과 처리 장치 수 kk에 대해, 최소 실행 시간을 구하라.

입력

  • 첫 줄: nn, qq (1≤n,q≤1,000,0001 \leq n, q \leq 1{,}000{,}000)
  • 둘째 줄: qq개의 정수 k1,…,kqk_1, \ldots, k_q (1≤ki≤1,000,0001 \leq k_i \leq 1{,}000{,}000)
  • 셋째 줄: a2,…,ana_2, \ldots, a_n (1≤ai<i1 \leq a_i < i), 명령 ii의 부모 번호. 명령 1이 루트다.

출력

qq개의 정수를 한 줄에 공백으로 구분해 출력한다. ii번째 값은 kik_i개의 처리 장치를 쓸 때의 최소 실행 시간이다.

힌트

명령 트리의 깊이별 노드 수를 전처리한 뒤, 각 kk에 대해 "앞 jj개 깊이를 jj시간에 처리하고 남은 노드를 kk개씩 처리"하는 후보들 중 최댓값을 택한다.

예제3

  1. 예제 1

    입력
    20 1
    3
    1 1 1 3 4 3 2 8 6 9 10 12 12 13 14 11 11 11 11
    
    예상 출력
    8
    
  2. 예제 2

    입력
    10 2
    1
    10
    1 1 1 1 1 1 1 1 1
    
    예상 출력
    10 2
    
  3. 예제 3

    입력
    7 3
    1
    2
    7
    1 1 2 2 3 3
    
    예상 출력
    7 4 3