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

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

자료 구조

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

요약
뿌리가 1인 트리에서 노드 a의 자손 중 a와의 거리를 x로 나눈 나머지가 y인 노드에 z를 더하고, 특정 노드의 가중치를 묻는 문제입니다.
난이도

어려움10점 중 9점

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

문제

Andy는 난징대학교에서 그를 따를 자가 없는 유명한 자료 구조 전문가이다. 어느 날 그는 평범하고 지루한 자료 구조 문제를 친구들에게 냈지만, 아무도 풀지 못했다. 당신은 어떤가?

루트가 1번인 트리가 주어진다. 각 노드의 가중치는 처음에 0이다. 두 노드 사이의 거리는 두 노드를 잇는 유일한 단순 경로의 간선 수이다. 다음 두 종류의 연산을 수행해야 한다.

  • 1번 연산: a,x,y,za, x, y, z가 주어지면, aa의 자손 중 자기 자신을 포함하여 aa와의 거리를 xx로 나눈 나머지가 yy인 노드들의 가중치에 zz를 더한다.
  • 2번 연산: aa가 주어지면 노드 aa의 가중치를 구한다.

입력

첫 줄에는 테스트 케이스의 수 TT (1≤T≤4)(1 \leq T \leq 4)가 하나의 정수로 주어진다.

각 테스트 케이스는 트리의 노드 수 nn과 연산의 수 mm (1≤n,m≤300000)(1 \leq n, m \leq 300000)을 나타내는 두 정수로 시작한다. 노드는 1번부터 nn번까지 번호가 매겨져 있다. 다음 줄에는 n−1n-1개의 정수 f1,f2,⋯ ,fn−1f_1, f_2, \cdots, f_{n-1} (1≤fi≤i)(1 \leq f_i \leq i)가 주어지며, ii번째 정수는 노드 i+1i+1의 부모이다. 이후 mm개의 줄에 연산이 주어진다. 각 줄은 1번 연산 1 a x y z (1≤a≤n,1≤x≤n,0≤y<x,0≤z≤500)(1 \leq a \leq n, 1 \leq x \leq n, 0 \leq y < x, 0 \leq z \leq 500) 또는 2번 연산 2 a (1≤a≤n)(1 \leq a \leq n)이다.

출력

각 테스트 케이스에서 2번 연산마다 답을 한 줄에 출력한다.

예제1

  1. 예제 1

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