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

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

트리에서 가장 긴 경로

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

요약
가중치가 있는 루트 트리에서 간선 가중치를 갱신하고, 어떤 정점에서 그 정점의 서브트리 안으로 내려가는 최대 가중치 경로를 구하는 질의를 처리한다.
난이도

어려움10점 중 9점

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

문제

두 친구가 서로에게 프로그래밍 문제를 번갈아 내고 풀며 실력을 겨루고 있습니다. 한 친구가 낸 문제는 다음과 같습니다.

정점이 NN개이고 각 정점에 1,2,…,N1, 2, \ldots, N의 번호가 붙은 트리가 주어집니다. 부모가 00인 정점이 이 트리의 루트입니다. 루트가 아닌 각 정점 ii는 자신의 부모와 정수 가중치 wiw_i인 간선으로 이어져 있습니다. 경로의 가중치는 그 경로에 속한 모든 간선의 가중치의 합이며, 단순 경로는 어떤 정점도 두 번 이상 지나지 않는 경로를 말합니다.

다음 두 종류의 질의를 모두 QQ개 처리해야 합니다.

  1. 유형 11 (ii, w′w'): 정점 ii와 그 부모를 잇는 간선의 가중치를 w′w'로 바꿉니다.
  2. 유형 22 (ii): 정점 ii를 루트로 하는 부분 트리를 생각합니다. 정점 ii에서 출발하여 이 부분 트리 안에서만 이어지는 단순 경로들 중 가중치가 최대인 값을 출력합니다. 정점 ii 하나로만 이루어진 빈 경로의 가중치는 00이므로 답은 항상 00 이상입니다.

입력

첫째 줄에 정수 NN (1≤N≤1051 \le N \le 10^5)이 주어집니다.

둘째 줄에 NN개의 정수 x1,x2,…,xNx_1, x_2, \ldots, x_N이 주어집니다. 여기서 xix_i는 정점 ii의 부모이며, 정점 ii가 루트이면 xi=0x_i = 0입니다.

셋째 줄에 NN개의 정수 w1,w2,…,wNw_1, w_2, \ldots, w_N이 주어집니다. 여기서 wiw_i는 정점 ii와 그 부모를 잇는 간선의 처음 가중치입니다 (−109≤wi≤109-10^9 \le w_i \le 10^9). 루트의 ww 값은 사용되지 않습니다.

넷째 줄에 정수 QQ (1≤Q≤1051 \le Q \le 10^5)가 주어집니다.

다음 QQ개의 줄에는 각각 하나의 질의가 주어집니다. 각 줄은 질의의 종류를 나타내는 정수 TT (1≤T≤21 \le T \le 2)로 시작합니다.

  • T=1T = 1이면 뒤에 두 정수 ii (1≤i≤N1 \le i \le N)와 w′w' (−109≤w′≤109-10^9 \le w' \le 10^9)가 옵니다.
  • T=2T = 2이면 뒤에 하나의 정수 ii (1≤i≤N1 \le i \le N)가 옵니다.

출력

유형 22 질의마다 그 답을 입력에 나타난 순서대로 한 줄에 하나씩 출력합니다. 가중치가 최대인 경로는 가중치가 00인 단일 정점 경로일 수도 있으므로, 모든 답은 00 이상입니다.

예제2

  1. 예제 1

    입력
    5
    0 1 1 2 2
    0 3 5 2 7
    6
    2 1
    2 2
    1 2 9
    2 1
    1 2 -15
    2 1
    
    예상 출력
    10
    7
    16
    5
    
  2. 예제 2

    입력
    4
    0 1 1 2
    0 -5 -3 -10
    4
    2 1
    2 2
    2 4
    2 3
    
    예상 출력
    0
    0
    0
    0