트리의 아름다움
시간 제한2초메모리 제한512 MB
루트가 있는 트리에서 부분트리에 floor(Y/K^d) 값을 더하는 갱신과 부분트리 합 질의를 처리합니다. N과 Q는 최대 100,000입니다.
문제
루트가 있는 트리가 있고, 정점은 1부터 N까지 번호로 구분된다. 정점 1이 루트이며, 모든 에 대해 는 정점 의 부모이다. 각 정점은 아름다움 값을 가지며, 처음에는 0이다.
특수한 기계로 정점들의 아름다움 값을 증가시킬 수 있다. 매개변수 X, Y, K를 기계에 주면 정점 X의 서브트리에 있는 모든 정점의 아름다움 값이 증가한다. 정점 가 X의 서브트리에 속하면, 그 정점의 아름다움 값은 만큼 증가한다. 여기서 d는 X에서 까지 가는 경로의 간선 수이다. 예를 들어 X의 아름다움 값은 Y만큼, X의 자식들은 만큼, X의 손자들은 만큼 증가하고, 이런 식으로 계속된다.
Q개의 연산을 하나씩 수행한다. 각 연산은 다음 두 가지 중 하나이다.
- 매개변수 X, Y, K로 기계를 사용한다.
- 정점 X의 서브트리에 있는 모든 정점의 아름다움 값의 합을 구한다.
입력
첫 줄에 정점의 수 N과 연산의 수 Q가 주어진다 (). 다음 줄에는 각 정점 의 부모 가 N - 1개 주어진다 (). 이후 Q개의 줄에는 다음 중 하나가 주어진다.
- 1 X Y K (; ): 매개변수 X, Y, K로 기계를 사용한다.
- 2 X (): 정점 X의 서브트리에 있는 모든 정점의 아름다움 값의 합을 보고한다.
출력
두 번째 종류의 연산마다, 입력된 순서대로 정점 X의 서브트리에 있는 모든 정점의 아름다움 값의 합을 한 줄에 하나씩 출력한다.