Today, we'll be practicing modifications on a tree!
Input
The first line contains two integers,
and
, denoting that there are
vertices and
queries.
Then there are
lines, each line containing two integers
and
, denoting that there is an edge between
and
in the tree.
Then there are
more lines, each containing one number: the initial weight of each vertex.
Then the next line contains the root.
Then there are
lines:
The first number is
.
means subtree modification.
is followed by
and
. This operation sets all vertex weights in the subtree of
to
.
means change root. The line contains one additional integer
, representing the new root of the tree.
means path modification.
is followed by integers
. This operation sets
as the vertex weight of all vertices on the path from
to
.
means subtree min.
is followed by
, the root of the queried subtree.
means subtree max.
is followed by
, the root of the queried subtree.
means increment subtree.
is followed by
and
, the root of the queried subtree and the value to increment by.
means path increment.
is followed by
. This operation increments all vertex weights on the path from
to
by
.
means path min.
is followed by
and
, the endpoints of the queried path.
means path max.
is followed by
and
, the endpoints of the queried path.
means change parent.
is followed by
and
. This operation changes the parent of
to
. If
is in the subtree of this operation, do nothing.
means path sum.
is followed by
and
, and asks for the sum of the weights on the path from
to
.
means subtree sum.
is followed by
, and asks for the sum of the weights in the subtree root at
.
Output
Print an answer for each query. All answers go on their own lines.
Sample Input 1
Copy
5 5
2 1
3 1
4 1
5 2
4
1
4
1
2
1
10 2 3
3 1
7 3 4
6 3 3 2
9 5 1
Sample Output 1
Copy
9
1
1
Sample Input 2
Copy
10 12
2 1
3 2
4 2
5 3
6 4
7 5
8 2
9 4
10 9
791
868
505
658
860
623
393
717
410
173
4
0 8 800
1 4
2 8 2 103
3 9
4 4
5 7 304
6 8 8 410
7 10 8
8 1 8
9 6 9
10 2 3
11 5
Sample Output 2
Copy
173
860
103
791
608
1557
Constraints

All intermediate values can be stored in a C++ int
.
Comments
My friend tallinn told me this was ez asl