CF396C.On Changing Tree

普及/提高-

通过率:0%

时间限制:2.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

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·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.

给你一棵包含 nn 个顶点(编号从 11 到 nn)的有根树,树的根节点为顶点 11。

初始时,所有顶点上的数值均为 00。接下来有 qq 个查询,每个查询为以下两种类型之一:

  • 查询格式:1 v x k。对该查询,你需要对顶点 vv 上的数加上 xx;对顶点 vv 的所有距离为 11 的后代顶点上的数,加上 x−kx - k;依此类推,对顶点 vv 的所有距离为 ii 的后代顶点上的数,加上 x−(i⋅k)x - (i \cdot k)。此处两个顶点之间的距离定义为连接这两个顶点的最短路径所含边的数量。
  • 查询格式:2 v。对该查询,你需要输出顶点 vv 上当前数值对 10000000071000000007(即 109+710^9 + 7)取模的结果。

请处理输入中给出的所有查询。

输入格式

The first line contains integer n (1 ≤ n ≤ 3·105) — the number of vertices in the tree. The second line contains n - 1 integers _p_2, _p_3, ... p__n (1 ≤ p__i < i), where p__i is the number of the vertex that is the parent of vertex i in the tree.

The third line contains integer q (1 ≤ q ≤ 3·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 ≤ v ≤ n; 0 ≤ x < 109 + 7; 0 ≤ k < 109 + 7). If type = 2, then next follows integer v (1 ≤ v ≤ n) — the vertex where you need to find the value of the number.

第一行包含一个整数 nn(1≤n≤3⋅1051 \leq n \leq 3 \cdot 10^5)——树中顶点的数量。
第二行包含 n−1n-1 个整数 p2, p3, …, pnp_2,\,p_3,\,\dots,\,p_n(1≤pi<i1 \leq p_i < i),其中 pip_i 表示树中顶点 ii 的父节点编号。

第三行包含一个整数 qq(1≤q≤3⋅1051 \leq q \leq 3 \cdot 10^5)——查询的数量。
接下来的 qq 行每行描述一个查询。每行的第一个数为 typetype,表示查询类型:

  • 若 type=1type = 1,则其后跟三个以空格分隔的整数 v, x, kv,\,x,\,k(1≤v≤n1 \leq v \leq n;0≤x<109+70 \leq x < 10^9 + 7;0≤k<109+70 \leq k < 10^9 + 7);
  • 若 type=2type = 2,则其后跟一个整数 vv(1≤v≤n1 \leq v \leq n)——表示需要查询该顶点处数值的查询。

输出格式

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).

对于每个第二类查询,在一行中输出查询所指定顶点上所写的数字。输出该数字对 1000000007(即 109+710^9 + 7)取模的结果。

输入输出样例

  • 输入#1

    3
    1 1
    3
    1 1 2 1
    2 1
    2 2

    输出#1

    2
    1

说明/提示

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

关于有根树的介绍,请参见:http://en.wikipedia.org/wiki/Tree_(graph_theory)。

输入解题思路,AI测评打分。不知道怎么写?

首页