만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

최소 공통 조상

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

요약
루트 있는 트리에서 각 노드 i에 대해 i보다 작은 모든 j와의 LCA 가중치 합을 구한다.
난이도

어려움10점 중 8점

유형
트리, DFS, 누적 합, 구현
정답자
아직 제출이 없습니다

문제

Bobo는 1,2,…,n1, 2, \dots, n으로 번호가 붙은 nn개의 노드로 이루어진 루트 있는 트리를 가지고 있다. 노드 11이 루트이고, ii번 노드의 가중치는 w_iw\_i이다.

Bobo는 f(2),f(3),…,f(n)f(2), f(3), \dots, f(n)을 구하려고 한다. 여기서

f(i)=∑_j=1i−1w_LCA(i,j).f(i) = \sum\_{j = 1}^{i - 1} w\_{\mathrm{LCA}(i, j)}\text{.}

입력

입력은 0개 이상의 테스트 케이스로 이루어지며, 파일의 끝에서 종료된다. 각 테스트 케이스는 다음과 같다.

첫째 줄에 정수 nn이 주어진다 (2≤n≤2⋅1052 \leq n \leq 2 \cdot 10^5).

둘째 줄에 nn개의 정수 w_1,w_2,…,w_nw\_1, w\_2, \dots, w\_n이 주어진다 (1≤w_i≤1041 \leq w\_i \leq 10^4).

셋째 줄에 (n−1)(n - 1)개의 정수 p_2,p_3,…,p_np\_2, p\_3, \dots, p\_n이 주어지는데, p_ip\_i는 p_ip\_i번 노드에서 ii번 노드로 향하는 간선을 나타낸다 (1≤p_i≤n1 \leq p\_i \leq n). 간선들은 트리를 이룬다.

nn의 합은 2⋅1052 \cdot 10^5을 넘지 않는다.

출력

각 테스트 케이스마다 (n−1)(n - 1)개의 정수 f(2),f(3),…,f(n)f(2), f(3), \dots, f(n)을 출력한다.

예제1

  1. 예제 1

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