#cacc20252C. Charlie 的三点权树

    ID: 278 Type: Default 2000ms 512MiB Tried: 3 Accepted: 2 Difficulty: 6 Uploaded By: Tags>数据结构树结构树链剖分线段树线性代数矩阵乘法

Charlie 的三点权树

时间限制: 2.0 秒

空间限制: 512 MB

题目描述

Charlie 有一棵 nn 节点的有根树,根节点编号为 11,每个节点 ii 有三个权值 ai,bi,cia_i,b_i,c_i,现在定义对于权值的操作 OO 如下:

  • O=1O=1,令 ai=ai+bi+cia_i=a_i+b_i+c_i
  • O=2O=2,令 bi=ai+bi+cib_i=a_i+b_i+c_i
  • O=3O=3,令 ci=ai+bi+cic_i=a_i+b_i+c_i
  • O=4O=4,给定 vv,令 ai=ai×va_i=a_i\times v
  • O=5O=5,给定 vv,令 bi=bi+vb_i=b_i+v
  • O=6O=6,给定 vv,令 ci=vc_i=v
  • O=7O=7,表示询问操作。

定义在以上操作在树上对应节点的操作 PP 如下:

  • P=1P=1,给定 xx,对应编号为 xx 的节点;
  • P=2P=2,给定 xx,对应编号为 xx 的节点为根的子树;
  • P=3P=3,给定 u,vu,v,对应树上 u,vu,v 两点之间的简单路径上的所有节点。

O,PO,P 两种操作按顺序组成一个操作,先输入 OO 操作,再输入 PP 操作。例如 1 2 3 表示对以节点 33 为根的子树,子树中所有节点的 ai=ai+bi+cia_i=a_i+b_i+c_i6 2 3 1 4 则表示树上 1,41,4 两点之间的简单路径上的所有节点的 ci=2c_i=2

特别地,对于询问操作,若询问的节点只有一个,只需依次输出该节点 ai,bi,cia_i,b_i,c_i 的值即可,否则,依次输出对应节点 aia_i 的和、bib_i 的和、cic_i 的和。由于答案可能很大,对于所有询问操作,你只需要输出答案在模 109+710^9+7 下的结果即可。

输入格式

从标准输入读入数据。

第一行输入两个整数 n,mn,m,分别代表树上节点的个数和操作个数。

第二行输入 nn 个整数 aia_i

第三行输入 nn 个整数 bib_i

第四行输入 nn 个整数 cic_i

其中 ai,bi,cia_i,b_i,c_i 分别表示节点 ii 的初始点权。

第五行输入 nn 个整数 pip_i,其中 pip_i 表示节点 ii 的父节点编号,题目保证 1pi<i1\le p_i<i,且只有 p1=0p_1=0,表示节点 11 为根节点。

接下来 mm 行,每行输入若干个整数,表示一次操作,操作格式如题面所示。

输出格式

输出到标准输出。

对于每次询问操作,输出一行由一个空格分隔的三个整数,表示你的答案。

5 7
1 1 2 2 1
2 1 3 1 2
1 1 2 1 2
0 1 1 2 2
1 2 3
2 1 2
3 3 3 4
4 2 2 1
5 7 3 3 5
6 1 1 4
7 2 1
24 39 24

子任务

对于 40%40\% 的测试数据,保证 1n,m1031\leq n,m\leq 10^3

对于另外 20%20\% 的测试数据,保证 O4O\geq 4

对于 100%100\% 的测试数据,保证 1n,m105, 1ai,bi,ci,v109 1\leq n,m\leq 10^5,~1\leq a_i,b_i,c_i,v\leq 10^9

提示

本题输入量较大,请采用效率较高的读入方式。