LOJ #3053. 「十二省联考 2019」希望(长链剖分+可回退化后缀修改数组)

本文详细解析了LOJ #3053题目,涉及长链剖分优化及可回退化后缀修改数组的应用。通过区间数据结构、单点修改、区间乘法等技术,解决了树形DP中的复杂问题,实现了O(nlogn)的时间复杂度解决方案。
摘要由CSDN通过智能技术生成

题目
此题是我做过最难的长链剖分/数据结构题。
没有之一。
紫荆花之恋也太水了吧,xmy每天没事就写一发紫荆花之恋,wk表示这太简单了,每天没事就该写一发Hope

1.出题人所说的 52 p t s 52pts 52pts暴力分。
容易发现对于每一组合法的救援范围,在救援范围内满足条件的点 u u u,构成了树上一个连通块。
但是这一组范围只能被计算一次。
利用树上一个连通块中的点和边满足点数-边数 = 1的性质,
我们可以枚举每个点,答案加上对于这个点合法的范围数,再枚举每条边,答案减去对于这条边两个点都合法的范围数,容易发现这样一组范围就只会被计算一次。
那么我们只需要求出:
f i , j f_{i,j} fi,j子树 i i i内距离 i < = j i<=j i<=j的点组成的包含 i i i的连通块个数。
g i , j g_{i,j} gi,j对于 i i i以及子树 i i i外距离 i < = j i<=j i<=j的点组成的包含 i i i的连通块个数。
那么答案就是 ∑ i f i , L g i , L − [ i   i s   n o t   r o o t ] f i , L − 1 ( g i , L − 1 ) \sum_{i} f_{i,L}g_{i,L} - [i\ is \ not \ root]f_{i,L-1}(g_{i,L}-1) ifi,Lgi,L[i is not root]fi,L1(gi,L1)
注意到 L L L可能会很大,但是可以发现大于子树深度之后的 f f f都等于 f 子 树 深 度 f_{子树深度} f g g g也同理可以把范围缩小到 O ( n ) O(n) O(n),从而 O ( n 2 ) D P O(n^2)\rm{DP} O(n2)DP

2.长链剖分优化
这道题的长链剖分优化对于未熟悉长链剖分套路的同学(即使你做过板题)十分难以理解,难以想象。
2.1
首先是 f f f, f u , i = ∏ v = s o n u ( f v , i − 1 + 1 ) f_{u,i} = \prod_{v = son_{u}} (f_{v,i-1}+1) fu,i=v=sonu(fv,i1+1)
看起来很容易,长链继承,短链暴力。
并不是。
首先长链继承的时候因为后面的 ∏ \prod 中,需要先 + 1 +1 +1,也就是(对于长链的)区间加。
也就是说需要区间数据结构,我们先分析完剩下的操作。
对于短链 v v v,并不是只有在 < = l e n v <=len_v <=lenv的时候才有贡献,根据我们的 D P DP DP式,以及上文所阐述的 L > l e n v L>len_v L>lenv的时候 f L = f l e n v f_{L} = f_{len_v} fL=fle

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值