题目 1764

社会送温暖

查看题解 ↗GitHub ↗如何评测
题号
1764
时间限制
2000 ms
内存限制
256 MB
标签
数据结构
来源
信息学奥赛一本通 · 高手训练篇·四、数据结构(高手训练)

【题目描述】

社会送温暖有非常多的体现方式,小G正在思考其中的一种: 我们可以把社会看做一个nn个节点的树,由n−1n-1条边连接,节点从11编号,每个节点有一定财富值,用金币数描述。 每次社会送温暖时,他会选择两个节点,对链接它们的道路上的点,采用这么几种方式: ①.按顺序加金币数,第一个加aa,第二个加a+da+d,第三个加a+2da+2d,以此类推。 ②.按顺序加金币数,第一个加aa,第二个加2a2a,第三个加4a4a,以此类推。 ③.按顺序改金币数,第一个改为aa,第二个改为a+da+d,第三个改为a+2da+2d,以此类推。 ④.按顺序改金币数,第一个改为aa,第二个改为2a2a,第三个改为4a4a,以此类推。 有时社会送温暖还要考虑两个点路径间的民众反映,所以会询问路径上的金币数和,你要告诉他答案模PP的值。

【输入】

第一行三个数n,q,Pn,q,P,分别表示节点数、操作数、和模数。 接下来n−1n-1行每行两个整数表示一条边。 接下来11行nn个整数,第ii个整数AiA_i表示这个点上初始的金币数。 接下来qq行每行三个数op,u,vop,u,v,表示操作类型与操作的两个点。 若op=1op=1或op=3op=3,则这行后还会接两个整数aa和dd,如题面所描述;若op=2op=2或op=4op=4,则这行后还会接一个整数aa;若op=5op=5,则表示询问。

【输出】

对每个询问操作输出一行作为答案。

【输入样例】

文本
5 5 29311
1 3
5 3
4 3
3 2
24701 12247 27130 27071 4060
4 5 1 27096
4 2 3 17348
3 1 2 8785 8918
5 3 5
4 2 1 2936

【输出样例】

文本
15488

【提示】

【数据规模】 20%的数据:n,q≤1000n,q≤1000。 40%的数据:n,q≤10000n,q≤10000。 另有30%的数据:树是一条链。 100%的数据:1≤n,q≤105;1≤P≤107;0≤Ai,d,a≤2311≤n,q≤10^5;1≤P≤10^7;0≤A_i,d,a≤2^{31}。

数据下载

题目 1764 的公开数据

正在读取文件列表…

常用命令

题目 1764 的 ROJ 命令

以下命令默认使用全局安装的 ROJ Skill,请在终端中直接执行;如果修改过 AGENT_HOME,请将命令中的 ~/.agents 替换为对应目录。