만드는 중입니다

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

트리의 아름다움

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

요약
루트가 있는 트리에서 부분트리에 floor(Y/K^d) 값을 더하는 갱신과 부분트리 합 질의를 처리합니다. N과 Q는 최대 100,000입니다.
난이도

어려움10점 중 9점

유형
트리, 세그먼트 트리, 분할 정복, 수학
정답자
아직 제출이 없습니다

문제

루트가 있는 트리가 있고, 정점은 1부터 N까지 번호로 구분된다. 정점 1이 루트이며, 모든 2≤i≤N2 \le i \le N에 대해 PiP_i는 정점 ii의 부모이다. 각 정점은 아름다움 값을 가지며, 처음에는 0이다.

특수한 기계로 정점들의 아름다움 값을 증가시킬 수 있다. 매개변수 X, Y, K를 기계에 주면 정점 X의 서브트리에 있는 모든 정점의 아름다움 값이 증가한다. 정점 X′X'가 X의 서브트리에 속하면, 그 정점의 아름다움 값은 ⌊Y/Kd⌋\lfloor Y/K^d \rfloor만큼 증가한다. 여기서 d는 X에서 X′X'까지 가는 경로의 간선 수이다. 예를 들어 X의 아름다움 값은 Y만큼, X의 자식들은 ⌊Y/K⌋\lfloor Y/K \rfloor만큼, X의 손자들은 ⌊Y/K2⌋\lfloor Y/K^2 \rfloor만큼 증가하고, 이런 식으로 계속된다.

Q개의 연산을 하나씩 수행한다. 각 연산은 다음 두 가지 중 하나이다.

  1. 매개변수 X, Y, K로 기계를 사용한다.
  2. 정점 X의 서브트리에 있는 모든 정점의 아름다움 값의 합을 구한다.

입력

첫 줄에 정점의 수 N과 연산의 수 Q가 주어진다 (1≤N,Q≤100 0001 \le N, Q \le 100\,000). 다음 줄에는 각 정점 i∈[2,N]i \in [2, N]의 부모 PiP_i가 N - 1개 주어진다 (1≤Pi<i1 \le P_i < i). 이후 Q개의 줄에는 다음 중 하나가 주어진다.

  • 1 X Y K (1≤X≤N1 \le X \le N; 1≤Y,K≤100 0001 \le Y, K \le 100\,000): 매개변수 X, Y, K로 기계를 사용한다.
  • 2 X (1≤X≤N1 \le X \le N): 정점 X의 서브트리에 있는 모든 정점의 아름다움 값의 합을 보고한다.

출력

두 번째 종류의 연산마다, 입력된 순서대로 정점 X의 서브트리에 있는 모든 정점의 아름다움 값의 합을 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    5 5
    1 1 3 3
    1 1 99 2
    2 1
    2 3
    1 3 2 3
    2 3
    
    예상 출력
    245
    97
    99