#P8959. 「CGOI-3」灵气

「CGOI-3」灵气

题目背景

「地牢中回荡着尖叫声...」

打完世花的 ac 进入地牢刷灵气……

花后地牢十分险恶,ac 想在地牢里搭满单向门。

题目描述

ac 世界里的地牢有 nn 个小房间,恰好存在 n1n-1 条过道,并且每个小房间连通。第 ii 个小房间生成的怪在一个时刻最多只会存在一个,且伤害为 aia_i

为了方便刷灵气,ac 在每个过道上建了一个单向门。

每一秒会发生以下几个事件之一:

  1. xx 个房间生成了一个怪。怪不会穿墙,只会顺着单向门方向移动。

  2. xx 个房间生成的怪被 ac 的仆从干掉了。

  3. ac 想要挂机刷怪,于是他希望知道,如果从时刻 1 开始站在房间 xx 一直到当前时刻,受到伤害最多的一个时刻所受伤害是多少。

这里定义一个时刻受到伤害为可以走到 ac 所在房间的怪的伤害值总和,“可以走到”定义为可以穿过若干条单向门到达 ac 的房间(若干可以为 00)。ac 非常强大,不会中途被怪打死。

当然,ac 所在的位置不会改变怪的刷新仆从的行为

简化版题面

一棵树,每个点有个点权,每条边有个方向。

有个集合,一开始为空,三个操作:

  1. 在集合中加入一个点。
  2. 删除集合中的一个点。
  3. 给出一个点 xx,询问集合中满足可以走到 xx 的点的点权之和的历史最大值。

输入格式

第一行,两个整数 n,mn,m,分别表示房间个数和事件个数。

接下来一行,共 nn 个整数,第 ii 个数表示 ii 房间中怪的伤害 aia_i

接下来 n1n-1 行,每行两个整数 x,yx,y,表示 xxyy 有一条过道,单向门方向为 xyx\rightarrow y

接下来 mm 行,第 ii 行两个整数 fl,xfl,x,表示第 xx 号房间发生了 flfl 号事件。

对于 fl=1fl=1 的操作,保证 xx 号房间没有怪。

对于 fl=2fl=2 的操作,保证 xx 号房间有怪。

输出格式

对每一个 fl=3fl=3 的事件,输出一个整数表示答案,并用换行隔开。

5 7
1 2 3 4 5
1 2
3 1
4 3
3 5
1 4
3 1
2 4
1 3
1 5
3 1
3 5
4
4
8
8 7
4 1 3 5 8 6 2 9
1 2
3 1
4 2
5 1
5 6
7 5
6 8
1 1
1 5
3 7
3 1
1 2
2 5
3 5

0
12
8

提示

样例一说明

第一个询问中,时刻 11 存在怪的房间为 {4}\{4\}44 号房间的怪可以走到 11 号房间,因此答案为 a4=4a_4=4

第二个询问中,受到伤害最大的时刻为时刻 11,答案为 a4=4a_4=4。其中时刻 55 存在怪的房间为 {3,5}\{3,5\},而 55 号房间的怪走不到 11 号房间,因此此时刻受到伤害为 a3=3<4a_3=3<4,不是最大值。

第三个询问中,受到伤害最大的时刻为时刻 553,53,5 号房间的怪均可走到 55,因此答案为 a3+a5=8a_3+a_5=8


数据范围

「本题采用捆绑测试」

对于 10%10\% 的数据,n,m2000n,m \leq 2000

对于另 10%10\% 的数据,过道 (x,y)(x,y) 单向门满足 x<yx<y

对于另 30%30\% 的数据,不存在 2 事件。

对于 100%100\% 的数据,1n,m2×1051\leq n,m \leq 2\times 10^51ai1041\leq a_i\leq10^4

但是地牢幽魂就是穿墙怪()()()

不会真的有人会在地牢里搭满单向门吧。