3310.On Changing Tree

Time Limit: 1s Memory Limit: 256MB

You are given a rooted tree consisting of n vertices numbered from 1 to n. The root of the tree is a vertex number 1.

Initially all vertices contain number 0. Then come q queries, each query has one of the two types:
The format of the query: 1 v x k. In response to the query, you need to add to the number at vertex v number x; to the numbers at the descendants of vertex v at distance 1, add x-k; and so on, to the numbers written in the descendants of vertex v at distance i, you need to add x-(i \cdot k). The distance between two vertices is the number of edges in the shortest path between these vertices. The format of the query: 2 v. In reply to the query you should print the number written in vertex v modulo 1000000007 (109+7).
Process the queries given in the input.

Input Format(From the terminal/stdin)

The first line contains integer n (1 \le n \le 3 \cdot 105) -the number of vertices in the tree. The second line contains n-1 integers p2,p3,... pn (1 \le pi \lt i), where pi is the number of the vertex that is the parent of vertex i in the tree.

The third line contains integer q (1 \le q \le 3 \cdot 105) - the number of queries. Next q lines contain the queries, one per line. The first number in the line is type. It represents the type of the query. If type=1, then next follow space-separated integers v,x,k (1 \le v \le n; 0 \le x \lt 109+7; 0 \le k \lt 109+7). If type=2, then next follows integer v (1 \le v \le n) -the vertex where you need to find the value of the number.

Output Format(To the terminal/stdout)

For each query of the second type print on a single line the number written in the vertex from the query. Print the number modulo 1000000007 (109+7).

Sample Input

Copy
3
1 1
3
1 1 2 1
2 1
2 2
 \n
 · \n
 \n
 · · · \n
 · \n
 · \n

Sample Output

Copy
2
1
 \n
 \n

Hints

You can read about a rooted tree here: http://en.wikipedia.org/wiki/Tree_(graph_theory).

Submit

请先 登录

© 2025 FAQs