U177650 【模板】Euler - Tour - Tree

题目背景

优秀的 顶树 也能过。 艹,这是轻工业,请不要把这道题当重工业的测试。期望复杂度是 $\mathcal O(n\log n)$

题目描述

你需要一个数据结构维护一棵树的以下操作。 - 换根。 - 子树乘。 - 换爸爸。 - 询问子树和对 $p$ 取余后的值。

输入格式

第一行三个整数 $n,m,mod$ 表示树点数,操作数,取余数。 接下来 $n-1$ 行每行两个数表示一条树边。 第 $n+1$ 行 $n$ 个数表示初始点权。 接下来 $m$ 行,每行格式如下: - $opt=1$,后面跟一个整数表示目标换的根。 - $opt=2$,后面跟两个整数 $x,val$ 表示对于 $x$ 子树乘 $val$,$x$ 不为根。 - $opt=3$,后面跟两个整数 $x,y$ 表示将 $x$ 的父亲换为 $y$,$x$ 深度大于二。 - $opt=4$,后面跟一个整数表示询问子树和,不为根。

输出格式

对于每个 $4$ 操作输出答案。

说明/提示

请大胆使用多项式算法,1s,512MB。 对于所有数据有 $n,m\leq10^{5},mod\le2\times10^{9}$ | 部分分 | 性质 | 分数 | | --------- | ----------------------------- | ---- | | subtask 1 | $n,m\le 1000$ | 6 | | subtask 2 | 没有 3 操作。 | 12 | | subtask 3 | 没有 1 操作。 | 19 | | subtask 4 | $opt=2$ 时 $val=0$。 | 12 | | subtask 5 | $mod$ 为质数。 | 23 | | subtask 6 | $n,m\le10^{5}$ | 28 | 只放置了最后两个 SUB。