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

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

몬스터 헌터

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

요약
루트 트리에서 정점을 처치하는 비용은 자기 hp에 살아 있는 자식들의 hp를 더한 값이고, 마법으로 최대 m마리를 공짜로 처치할 수 있을 때 m=0부터 n까지 각각의 최소 총 전력을 구한다.
난이도

어려움10점 중 8점

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

문제

정점이 nn개인 루트 트리가 있고 루트 정점은 11번이다. 각 정점에는 몬스터가 한 마리씩 있다. ii번 정점에 있는 몬스터의 체력은 hp_ihp\_i이다.

Kotori는 모든 몬스터를 죽이려고 한다. ii번 정점의 몬스터는 ii번 정점의 부모 정점에 있는 몬스터가 이미 죽어 있을 때만 죽일 수 있다. ii번째 몬스터를 죽이는 데 필요한 힘은 hp_ihp\_i와, 부모 정점이 ii번 정점인 정점 jj에 살아 있는 다른 모든 몬스터의 체력의 합이다. 정확히 말해 힘은 다음과 같다. hp_i+∑_the monster in vertex j is aliveand i is the direct parent of jhp_jhp\_i + \sum\_{\begin{array}{c}\text{the monster in vertex } j \text{ is alive} \\ \text{and } i \text{ is the direct parent of } j \end{array}} hp\_j

또한 Kotori는 마법을 사용할 수 있다. 마법을 한 번 사용하면 아무 제약 없이 아무 몬스터나 0의 힘으로 죽일 수 있다. 즉, 부모 정점의 몬스터가 살아 있어도 그 몬스터를 고를 수 있다.

각 m=0,1,2,⋯ ,nm=0,1,2,\cdots,n에 대해, 마법을 mm번 사용할 수 있을 때 모든 몬스터를 죽이는 데 필요한 최소 총 힘을 각각 구하라.

입력

입력은 여러 테스트 케이스로 이루어진다. 입력의 첫 줄에는 테스트 케이스의 수를 나타내는 정수 TT가 주어진다. 각 테스트 케이스는 다음과 같다.

첫 줄에는 정점의 수를 나타내는 정수 nn이 주어진다 (2≤n≤2×1032 \le n \le 2 \times 10^3).

둘째 줄에는 (n−1)(n-1)개의 정수 p_2,p_3,⋯ ,p_np\_2,p\_3,\cdots,p\_n이 주어진다 (1≤p_i<i1 \le p\_i < i). p_ip\_i는 정점 ii의 부모 정점이다.

셋째 줄에는 nn개의 정수 hp_1,hp_2,⋯ ,hp_nhp\_1,hp\_2,\cdots,hp\_n이 주어진다 (1≤hp_i≤1091 \le hp\_i \le 10^9). 각 몬스터의 체력이다.

모든 테스트 케이스의 nn의 합은 2×1032 \times 10^3을 넘지 않는다.

출력

각 테스트 케이스마다 한 줄에 (n+1)(n+1)개의 정수 a_0,a_1,⋯ ,a_na\_0, a\_1, \cdots, a\_n을 공백으로 구분해 출력한다. a_ma\_m은 Kotori가 마법을 mm번 사용할 수 있을 때 모든 몬스터를 죽이는 데 필요한 최소 총 힘이다.

예제1

  1. 예제 1

    입력
    3
    5
    1 2 3 4
    1 2 3 4 5
    9
    1 2 3 4 3 4 6 6
    8 4 9 4 4 5 2 4 1
    12
    1 2 2 4 5 3 4 3 8 10 11
    9 1 3 5 10 10 7 3 7 9 4 9
    
    예상 출력
    29 16 9 4 1 0
    74 47 35 25 15 11 7 3 1 0
    145 115 93 73 55 42 32 22 14 8 4 1 0