LCT刷题总结

写在前面:

初探多项式之后,开始了数据结构之旅,

可持久化数据结构的总结大概是咕了,

在这里只总结一些$LCT$的我认为比较好的题

T1:水管局长数据加强版

发现题中只有删边操作,而我们只会做加边,所有考虑时光倒流

先在最后时刻作出最小生成树,之后$LCT$维护最大值不断$link,cut$加边删边更新答案即可

T2:GERALD07

颓了$B$哥的题解,挺好的一道题,然而$secert$大婶秒切$%%%$

首先联通块数等于总点数减去有效边数

这里的有效边数是指不会因为加入此边而删去在当前查询区间里的边

所以我们为了使一条边尽量有效

应该(在不得不删边的情况下)贪心选择这条路径上最早出现的边并把它删掉

用主席树维护便可以进行查询操作了

T3:在美妙的数学王国中畅游

其实这道题还是偏数学一些

题中给出了$Taylor$展开的式子,考虑直接代入$x0=0$

之后用$LCT$维护一条链的多项式系数,现在问题转化为三种函数的展开

对于$f_1$求导:

$$0:sin(ax+b)$$

$$1:a*cos(ax+b)$$

$$2:-a^2*sin(ax+b)$$

$$3:-a^3*cos(ax+b)$$

$$4:a^4*sin(ax+b)$$

显然是四个一循环

$f_2:$

$$0:e^{ax+b}$$

$$n:a^n*e^{ax+b}$$

$f_3:$本身就是个多项式直接用即可

稍微展开一下发现前两个的分母上是阶乘,所以只保留$15$项左右便可以保证精度

最后上$LCT$,问题便得到了解决

T4:LCA

对查询离线,每个查询的答案便是$calc(R)-calc(L-1)$

$LCA$深度和可以用树上差分实现,每加入一个点相当于把它到根的路径上点权全加$1$

查询的答案便是它到根的路径上的点权和

T5:即时战略

暴力的思路便是每次一直从根一直$explore$到$x$,查询最坏$n^2$次

考虑优化:用一颗$LCT$维护已知点,在$splay$上二分,并在$splay$间来回跳直到找到要找的点

查询复杂度可以做到均摊$n*log_2(n)$

然而毒瘤出题人对于链要求查询$n+log$

维护L,R代表已知区间,失败的期望次数便是$frac{log_{frac{4}{3}}n}{2}$

$randomshuffle一$下便可以通过这个测试点

T6:大森林

是个神仙题,看了一晚上题解也没有什么成型的思路

首先探索一下本题的性质:

$1>$

可以离线

$2>$

因为查询保证点是存在的,所以每个点可以在最初就加好,而且并不需要删除

$3>$

离线处理相当于在一棵树上改变一段时间新建的点的父亲,

为了保证复杂度,需要对于每一个$1$操作建一个虚点,

把每个点都建在时间轴上它前面离它最近的虚点下面

虚点之间也要连接起来

用$LCT$便可以做到$log_2(n)$改变父子关系

这道题用虚点的弊端在于不能用$split$查询

因为建虚点无法保证任意两点之间的距离是原树中的距离

但是可以保证每个点到1的距离是原树中的距离

所以可以用$dis[x]+dis[y]-2*dis[LCA(x,y)]$

一道难题便迎刃而解了吧?

其实我理解很不深刻欢迎各路神仙来hack

T7:大融合

题目大意:动态维护子树$size$

原先的$LCT$一般是维护一条路径上的权值什么的,

一旦出现子树信息便显得有些棘手

不妨考虑子树的信息应该用什么统计:

显然是把当前点和根联通后的虚子树的$size$和

之后便是如何维护:

我们发现只有在$access$和$link$操作时会改变虚子树的连接情况,所以直接维护即可

原文地址:https://www.cnblogs.com/AthosD/p/12079034.html