슈퍼컴퓨터

아직 제출이 없습니다시간 제한2초메모리 제한256 MB

문제

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

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

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

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

입력

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

출력

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

힌트

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