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 1149C 线段树 LCA

Codeforces 1149D - Abandoning Roads

@codeforces - 1149D@ Abandoning Roads

ctree CART 条件树中的权重与权重 (party::ctree)

如何实现使用 ctree(party 包)构建的决策树的输出?

ctree()的终端节点如何提取拆分规则