홍준이와 트리
시간 제한2초메모리 제한512 MB
부분 트리에 거리에 따라 달라지는 값을 더하는 갱신을 처리하며, 정점 하나의 가중치를 1e9+7로 나눈 나머지를 답한다.
문제
1번 정점이 루트인 정점 개짜리 트리가 주어진다. 처음에 모든 정점의 가중치는 0이다.
쿼리 개를 주어진 순서대로 처리한다. 쿼리는 두 종류다.
- 유형 1:
1 v x k형태로 주어진다. 정점 의 가중치에 를 더하고, 의 서브트리에 속하면서 와 거리가 인 모든 정점의 가중치에 를 더한다. (, ) - 유형 2:
2 v형태로 주어진다. 정점 의 현재 가중치를 로 나눈 나머지를 출력한다. ()
가중치는 음수가 되기도 한다. 유형 2의 답은 항상 0 이상 이하의 나머지다.
입력
첫째 줄에 정점의 개수 과 쿼리의 개수 가 주어진다. (, )
둘째 줄에 개의 정수 이 주어진다. 는 정점 의 부모이고 를 만족한다. 이 1이면 둘째 줄은 빈 줄이다.
셋째 줄부터 개의 줄에 쿼리가 한 줄에 하나씩 주어진다. 각 줄의 첫 정수는 쿼리의 유형을 나타내고, 그 뒤에 유형에 맞는 정수가 이어진다.
출력
유형 2 쿼리마다 답을 한 줄에 하나씩, 입력에 주어진 순서대로 출력한다.