#P3979. 遥远的国度

    ID: 2920 Type: RemoteJudge 1000ms 125MiB Tried: 0 Accepted: 0 Difficulty: 6 Uploaded By: Tags>线段树倍增最近公共祖先,LCA树链剖分

遥远的国度

题目描述

zcwwzdjn 在追杀 zhx ,而 zhx 逃入了一个遥远的国度。当 zcwwzdjn 准备进入遥远的国度继续追杀时,守护神 RapiD 阻拦了 zcwwzdjn 的去路,他需要 zcwwzdjn 完成任务后才能进入遥远的国度继续追杀。

问题是这样的:遥远的国度有 nn 个城市,这些城市之间由一些路连接且这些城市构成了一颗树。这个国度有一个首都,我们可以把这个首都看做整棵树的根,但遥远的国度比较奇怪,首都是随时有可能变为另外一个城市的。遥远的国度的每个城市有一个防御值,第 ii 个的防御值为 valival_i,有些时候 RapiD 会使得某两个城市之间的路径上的所有城市的防御值都变为某个值。

RapiD 想知道在某个时候,如果把首都看做整棵树的根的话,那么以某个城市为根的子树的所有城市的防御值最小是多少。

由于 RapiD 无法解决这个问题,所以他拦住了 zcwwzdjn 希望他能帮忙。但 zcwwzdjn 还要追杀 zhx,所以这个重大的问题就被转交到了你的手上。

输入格式

11 行两个整数 n mn\ m,代表城市个数和操作数。

22 行至第 nn 行,每行两个整数 u vu\ v,代表城市 uu 和城市 vv 之间有一条路。

n+1n+1 行,有 nn 个整数,第 ii 个代表第 ii 个点的初始防御值 valival_i

n+2n+2 行一个整数 idid,代表初始的首都为 idid

n+3n+3 行至第 n+m+2n+m+2 行,首先有一个整数 optopt

如果 opt=1opt=1,接下来有一个整数 idid,代表把首都修改为 idid

如果 opt=2opt=2,接下来有三个整数 x y vx\ y\ v,代表将 x yx\ y 路径上的所有城市的防御值修改为 vv

如果 opt=3opt=3,接下来有一个整数 idid,代表询问以城市 idid 为根的子树中的最小防御值。

输出格式

对于每个 opt=3opt=3 的操作,输出一行代表对应子树的最小点权值。

3 7
1 2
1 3
1 2 3
1
3 1
2 1 1 6
3 1
2 2 2 5
3 1
2 3 3 4
3 1
1
2
3
4

提示

对于 20%20\% 的数据,n1000,m1000n\le 1000,m\le 1000

对于另外 10%10\% 的数据,n100000,m100000n\le 100000,m\le 100000,保证修改为单点修改。

对于另外 10%10\% 的数据,n100000,m100000n\le100000,m \le 100000,保证树为一条链。

对于另外 10%10\% 的数据,n100000,m100000n\le 100000,m\le100000,没有修改首都的操作。

对于 100%100\% 的数据,$1 \leq n\le 100000,1 \leq m \le 100000,0<val_i<2^{31}$。