首页 > 其他分享 >题解【CF1149C Tree Generator】

题解【CF1149C Tree Generator】

时间:2022-10-05 16:23:06浏览次数:73  
标签:.. Generator 题解 最大值 lrm text 区间 CF1149C sum

CF1149C Tree Generator™
不一定更好的阅读体验

牛逼题 & ZROI Day3 数据结构选讲。

来一波详细的题解。

当时和 \(\texttt{ys}\),\(\texttt{hy}\) 还有小猴子讨论了半天,一直认为是最大子段和很激动直接就在群里说了,结果被喷了,然后一波周折群友觉得这是十分正确的,然后一波周折又被喷了(

考虑把 ( 看成深度 \(+1\),) 看成深度 \(-1\),那么就可以把括号序列看成一个 \(+1\) 和 \(-1\) 的序列。

考虑一条路径的长度如何算,对于一段 \(u\to \operatorname{lca}(u,v)\to v\) 的路径,在括号序列上肯定会被表示成形如 )...)(...( 的一段,路径长度为 ( 括号数量 \(+\) ) 括号数量。

但是,如果路径上还会有一个子树,比如形如 )..()..)(..(() 是需要忽略不计的。

由此我们得到结论:括号序列上任何一个子区间,去掉所有匹配的括号后,得到的括号序列一定是树上一条链。如果用权值表示法来表示,你会发现其实匹配的括号根本不用管,因为一个 \((+1)\) 和一个 \((-1)\) 都消掉了,如果我们称 )( 为分界点,( 右边的部分为右区间,) 左边的部分为左区间,那么这条路径的长度为,右区间的权值和 \(+\) 左区间权值和的相反数,因为左区间的 ) 我们表示成了 \(-1\),现在需要算成 \(1\) 的长度。

对此,我们又得到一个结论:对于所有子区间,找到一个分界点,右区间权值和 \(-\) 左区间权值和的最大值,为这个子区间的路径长度最大值。

那么显然,树的直径是对于所有子区间,找到一个分界点后的权值最大值。

交换字符可以看成 \(\Theta(1)\) 的修改,那么很自然地想到用线段树来维护这个东西,且类似于最大子段和。

维护区间答案 \(\text{ans}\),后缀最大值 \(\text{sm}\),后缀最小值 \(\text{sn}\),前缀最大值 \(\text{pm}\),前缀最小值 \(\text{pn}\)。

但这样是不足以转移的,比如左区间是 ))) 右区间是 ))(,你完全可以一起拼一块儿。

所以我们还要维护一下,紧靠左端点的答案最大值 \(\text{lm}\),紧靠右端点答案最大值 \(\text{rm}\),紧靠左右端点的答案最大值 \(\text{lrm}\),以及区间和 \(\text{sum}\)。

考虑 \(\texttt{pushup}\) 的过程,设 \(u\) 的左右儿子分别为 \(u_0\) 和 \(u_1\)。

  • 首先很显然的 \(\text{ans}_u\leftarrow \max(\text{ans}_{u_0},\text{ans}_{u_1})\)。

  • 还可以是左区间已经是包含右端点的完整答案了,右区间在拼上一个 (..( 的最长前缀,\(\text{ans}_u\leftarrow \text{rm}_{u_0}+\text{pm}_{u_1}\)。

  • 当然完整答案在右区间的情况也同理,\(\text{ans}_u\leftarrow \text{lm}_{u_1}-\text{sn}_{u_0}\)。

前缀最小值 / 最大值都可以通过区间和来转移,考虑 \(\text{lm}\) 的转移,首先可以直接继承 \(\text{lm}_{u_0}\),还让左区间紧靠左右端点的答案再拼上右端点的 (..(,即 \(\text{lrm}_{u_0}+\text{pm}_{u_1}\),还可以是右区间选择一个紧靠左端点的答案段 )..)(..(,然后左区间全部选择,只不过这里需要注意取反,\(\text{lm}_{u_1}-\text{sum}_{u_0}\)。\(\text{rm}\) 是同理的。

\(\text{sum}\) 直接将左右区间的 \(\text{sum}\) 加起来就行了。

最后还剩一个 \(\text{lrm}\),这个很简单,只需要一个区间选择 \(\text{lrm}\) 另一个区间选择 \(\text{sum}\),同样注意变号的问题:\(\text{lrm}_u\leftarrow\max(\text{lrm}_{u_0}+\text{sum}_{u_1},\text{lrm}_{u_1}-\text{sum}_{u_0})\)。

这样就都处理完毕啦。

code

标签:..,Generator,题解,最大值,lrm,text,区间,CF1149C,sum
From: https://www.cnblogs.com/UperFicial/p/16755771.html

相关文章

  • [题解]洛谷 P4700
    经典题没做出来,是不是该死?是不是该死?首先缩点什么的都是套路性的,然后发现一个事,你要是缩完点直接做,就相当于有向无玕图上标记一些点,求另一些点能到达多少个标记点,这个似乎......
  • CSP-S 模拟赛 #2 题解
    300rk3。题面是本校OJ的,链接挂了找我。upd:T1被xiaopanda的hack数据卡了。T1-A-BProblem出题是一件痛苦的事情!题目看多了也有审美疲劳,于是我舍弃了大家所熟......
  • texlive编译中发现字体有问题解决
    这里可以用tlmgrinfo命令搜索需要下载的字体并从CTAN官网下载。一般这个时候也会有对应的路径,比如texmf-dist/fonts/。把下载的字体解压放在这些路径下,然后分别运行mktexl......
  • 【LGR-122】T1 & T2 题解
    T1下面所说的做法来自于dty(%%%%%%%%%)注意到每一个数的绝对值是大于等于\(2\)的,那么就可以发现一个性质:当一个区间长度为\(len\)时,如果\(len\ge62\),那么这个区间的......
  • 组态软件报警问题解决
    作为工业自动化领域的从业者,经常会使用各种组态软件,近期作者在使用业界鼎鼎大名的组态软件IFix过程中就遇到了一个小case,现在分享给大家。众所周知,IFix在运行过程中报警会......
  • 【题解】P3583 [POI2015] KWA
    模拟赛出这道题???还好赛时乱搞做出来了(/hanxlinkDescription定义一个数\(n\)的拆分为:将\(n\)表示为若干个不同的正整数的平方和。令\(k(n)\)为\(n\)的拆分中最......
  • CF 547D. Mike and Fish 题解
    Solution1二分图染色显然这题是构造染色方案,于是我们考虑将矩阵转化成图进行染色。结论:将同一行的点两两配对,将同一列的点两两配对,形成的一定是二分图。证明:由于每......
  • P4572 题解
    前言题目传送门!更好的阅读体验?双倍经验:P3554(数据坑一点)。简要题意可以看P3554。思路:二分答案+树形DP。思路答案显然具有单调性,所以考虑二分答案。\(\operatorna......
  • P3226 [HNOI2012]集合选数 题解
    纪念一下30紫and500AC首先先膜拜一下神仙出题人,这题太神仙了。题意:要构造一个集合,使得$x\inA$,满足$2x\notinA$且$3x\notinA$,求\(\{1,2,\ldots,n\}\)......
  • 【Ynoi2009】 rla1rmdq 题解 (离线分块 + 线性空复处理)
    洛谷传送门分块。Solution看到是区修区查,还有时限,不难想到是分块,根号复杂度。然后看到空间复杂度,需要离线下来转为线性复杂度。考虑如何分块。观察操作性质,发现节点......