Codeforces 1149CTree Generator?
Posted denverjin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces 1149CTree Generator?相关的知识,希望对你有一定的参考价值。
Codeforces 1149 C
题意:给一个括号序列,这个括号序列可以生成一棵树:
(
:生成一个新的节点,放到当前节点的儿子处。
)
:走到当前节点的父亲。
现在有\(q\)次操作,每次交换两个括号的值,问树直径。
思路:首先我们放松条件,只求树的高。
那么我们走过这个括号序列会经过\(2n-1\)个点。
我们只要求这些点的深度的最大值即可。
这就是一个前缀最大值。
可以用线段树轻易维护。
现在可以再进一步,考虑直径。
我们知道树上距离公式\(dep_u+dep_v-2dep_{lca}\)。
在我们走过的\(2n-1\)个点中,两个点的\(lca\)肯定在它们中间。
(因为我们从\(u\)走到\(v\)必定经过它们的\(lca\)啊
我们还知道它们的\(lca\)是它们中间的点中最深的。
(因为如果想要往下走必须新建节点
所以我们要求的就是所有的\((l,r)\)区间中最大的\(dep_l+dep_r-2dep_i(l\le i\le r)\)
这个可以分两种情况处理(因为一下弄一个区间实在太难搞了
第一是\(dep_l-2dep_i\),二是\(dep_r-2dep_i\),这样就可以在加上另一边(保证大(小)于等于\(i\)的)的\(l\)(\(r\))。
用线段树维护这个就好了。
啊啊啊上推操作烦死人啊
以上是关于Codeforces 1149CTree Generator?的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces 1149D - Abandoning Roads
@codeforces - 1149D@ Abandoning Roads
ctree CART 条件树中的权重与权重 (party::ctree)