교육적인 트리 문제

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

요약
부모 조건을 만족하며 정점 k개를 골라 A값 합을 최대로 할 때, k가 1부터 N일 때의 최댓값을 각각 구한다.
난이도

어려움10점 중 8점

유형
그리디, 힙, 트리, 정렬
정답자
아직 제출이 없습니다

문제

NN개의 정점을 가진 트리가 주어진다. 각 정점에는 11번부터 NN번까지 번호가 중복 없이 주어지며, 11번 정점은 트리의 루트이다.

22 이상 NN 이하의 모든 정수 ii에 대해서, ii번 정점의 부모 정점은 p_ip\_i번 정점이다.

이 트리의 ii번 정점에는 정수 A_iA\_i가 적혀 있다. 또한, A_i≤A_p_iA\_i \leq A\_{p\_i} 라는 특수한 성질을 만족한다. 우리는 이 트리에서 몇 개의 정점을 선택하여, 선택된 정점들에 적혀있는 정수들의 합을 최대화하고 싶다. 이때 선택된 모든 정점은 11번 정점이거나, 자신의 부모 정점 또한 선택되어 있어야 한다.

선택할 정점들의 수에 따라 문제의 정답을 구해보자.

입력

첫째 줄에 정수 NN이 주어진다. (2≤N≤300 000)(2 \leq N \leq 300\ 000)

둘째 줄에 정수로 이루어진 수열 p_2,p_3,⋯ ,p_Np\_2, p\_3, \cdots, p\_N이 공백으로 구분되어 주어진다. (1≤p_i<i)(1\leq p\_i < i)

셋째 줄에 정수로 이루어진 수열 A_1,A_2,⋯ ,A_NA\_1, A\_2, \cdots, A\_N이 공백으로 구분되어 주어진다. (1≤A_i≤109)(1\leq A\_i \leq 10^9)

출력

첫째 줄부터 NN개의 줄에 걸쳐 ii번째 줄에는 ii개의 정점을 선택했을 때의 정답을 출력한다.

예제1

  1. 예제 1

    입력
    4
    1 1 2
    4 4 3 1
    
    예상 출력
    4
    8
    11
    12