bzoj4712: 洪水 动态Dp 树链剖分+线段树 或 LCT维护矩阵乘法

bzoj4712: 洪水

Description

小A走到一个山脚下,准备给自己造一个小屋。这时候,小A的朋友(op,又叫管理员)打开了创造模式,然后飞到
山顶放了格水。于是小A面前出现了一个瀑布。作为平民的小A只好老实巴交地爬山堵水。那么问题来了:我们把这
个瀑布看成是一个n个节点的树,每个节点有权值(爬上去的代价)。小A要选择一些节点,以其权值和作为代价将
这些点删除(堵上),使得根节点与所有叶子结点不连通。问最小代价。不过到这还没结束。小A的朋友觉得这样
子太便宜小A了,于是他还会不断地修改地形,使得某个节点的权值发生变化。不过到这还没结束。小A觉得朋友做
得太绝了,于是放弃了分离所有叶子节点的方案。取而代之的是,每次他只要在某个子树中(和子树之外的点完全
无关)。于是他找到你。

Input

输入文件第一行包含一个数n,表示树的大小。
接下来一行包含n个数,表示第i个点的权值。
接下来n-1行每行包含两个数fr,to。表示书中有一条边(fr,to)。
接下来一行一个整数,表示操作的个数。
接下来m行每行表示一个操作,若该行第一个数为Q,则表示询问操作,后面跟一个参数x,表示对应子树的根;若
为C,则表示修改操作,后面接两个参数x,to,表示将点x的权值加上to。
n<=200000,保证任意to都为非负数

Output

对于每次询问操作,输出对应的答案,答案之间用换行隔开。

Sample Input

4
4 3 2 1
1 2
1 3
4 2
4
Q 1
Q 2
C 4 10
Q 1

Sample Output

3
1
4

分析

动态Dp大概的概念就是Dp中用来决策的变量会变化,在第一遍Dp的基础之上考录若干个变量的变化对Dp值的影响,并用一些奇技淫巧维护(比如数据结构和数据结构和数据结构)
这道题很典型。
首先方程很好写吧。
f [ u ] = m i n { v [ u ] , ∑ f [ s o n u ] } f[u]=min \{v[u], \sum f[son_u]\} f[u]=min{ v[u],f[sonu]}
为了方便,定义 h [ u ] = ∑ f [ s o n u ] h[u]=\sum f[son_u] h[u]=f[sonu]
不难发现任何修改不会减小f的值。
考虑一次修改的影响。
注意修改 u u u节点的值只会影响到 u u u的祖先。
考虑一个点的 f f f值的增量 D i D_i Di
如果说 D u = 0 D_u=0 Du=0,显然不会对答案造成任何影响。
否则的话,对于 u u u的若干个连续祖先 x x x,如果他们满足 h [ x ] + D u &lt; = v [ x ] h[x]+D_u&lt;=v[x] h[x]+Du<=v[x],那么有 h [ x ] → h [ x ] + D u , f [ x ] → D u + f [ x ] h[x]\to h[x]+D_u, f[x] \to D_u+f[x] h[x]h[x]+Du,f[x]Du+f[x]
考虑这些祖先深度最低的节点 z z z,显然 h [ z ] → h [ z ] + D u h[z] \to h[z]+D_u h[z]h[z]+Du
然而它的 f f f值就不一样了, f [ z ] → v [ z ] f[z] \to v[z] f[z]v[z]
这个时候我们发现我们面对的是一个完全一样的子问题。
考虑这样的子问题会有多少个。
注意到一旦一个节点 u u u满足 f [ u ] = v [ u ] f[u]=v[u] f[u]=v[u],那么除非这个节点被修改,不然这个节点的 f f f值不会再增加。
所以说这样的子问题个数是 O ( n + m ) O(n+m) O(n+m)的。
于是我们考虑如何用数据结构快速解决这个子问题。
首先找到 u u u的若干个满足 h [ x ] + D u &lt; = v [ x ] h[x]+D_u&lt;=v[x] h[x]+Du<=v[x]连续祖先 x x x中的深度最低的祖先 z z z

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值