\(LCT\)维护子树信息学习笔记

昨天\(FDF\)好题分享投了 \([ZJOI2018]\)历史 这题。

然后我顺势学学这个姿势。

结果调了一年。。。于是写个笔记记录一下。

基本原理

比较显然地,虽然父子关系在不断变化,但是重链与重链之间的连接是不变的。换句话说,一个点的某个虚儿子也许并不是他在原树中的某个儿子,但是这个点总和上来的信息是这整棵子树的。

所以我们定义这个点总和的信息(记为\(siz\))为总和该子树的所有信息,

然后记\(fsz\)为虚儿子的总和信息,\(val\)为单点信息。

那么可以得到信息的统计式为:

\(siz[x]=siz[ls]+siz[rs]+fsz[x]+val[x]\)

若将\(x\)做\(Splay\)到根的话,则这个点的\(siz\)就是以这条重链链顶为根的子树的信息和。

(一定把原树和\(LCT\)分开啊

而如果我们要查以某个点为根的子树信息和的话,则先将其\(Splay\)到根,

那么所求即为:\(siz[rs]+fsz[x]+val[x]\)

很简单,就是自己重儿子的所有信息加上自己的虚子树信息以及自己

这里\(siz\)的用处自己脑补一下,很显然这个信息用\(siz\)整合出来也是对的。

这就是最基本的做法了。

虚实信息维护

这个很好办,考虑虚实边的修改只会在一些情况下出现。

\(Access:\)直接做加减法维护\(fsz\)就行了。

\(Link:\)因为每次连边是连一条虚边,所以我们直接维护,要注意的是作为儿子的点要被\(Splay\)上来总和信息。

\(Cut:\)没有特别的地方,和上面一样做即可。

带单点修改

如果带修改,那么就意味着我们需要更新这个被修改点到原树树根的信息。

到树根?\(Access!\)

直接大力\(Access\)一波,每次跳一条虚边就直接做一次单点修改就行了,注意切换虚实边。

特技?

如果要求魔改\(Access?\)

那得好好研究一下它到底长啥样啊。

首先,\(Access\)中前一条重链那棵\(Splay\)的根不一定是你的原树中的那个儿子,你得一直沿着左儿子找,找到深度最小的那个才是。

这个找的复杂度应该与\(Splay\)的复杂度相当,所以不影响其复杂度。

然后呢,你想要那个儿子的子树信息怎么办?再\(Splay\)上去?

不用了,虽然前一条重链那棵\(Splay\)的根不一定是你的原树中的那个儿子,但是它确确实实总和了那棵子树的信息,所以直接调用它的信息即可。

想用\(Access\)模拟某种染色过程?

不就是有些边不能连吗?信息还是直接加加减减来维护,连边特判就行了。

那为什么历史那题要写这么久?

我菜。

所以这个还是比较简单的,毕竟目前没写到太喵的做法。

那么就这样了。

随机推荐

  1. Python Django的安装配置

    学习Django前,我们要确定电脑上是否已经安装了Python,目前Python有两个版本,不过这两个版本并不互相兼容,所以根据个人选择合适的版本. 因为从Django2.0开始将不再支持Python ...

  2. Linux中的NetworkManager网络管理

    转载关于 NM_CONTROLLED和Network Manager Redhat在RHEL 6(Redhat Enterprise Linux),上搞了一个 Network manger 服务(同样 ...

  3. 查询数据库对象的DDL信息

    表的DDL select dbms_metadata.get_ddl('HBBL','TABLE','AGREEMENT_MIRROR') from dual:

  4. 【洛谷T2695 桶哥的问题——吃桶】

    这是我们团队的一个题目(就是一个_rqy说很好写的题QwQ) 题目背景 @桶哥 这个题目的思路很玄学(性感_rqy在线讲解) 60 Pts 对于前面的六十分,好像很好拿,单纯的打一个模拟 唯一需要注意 ...

  5. 架构-数据库访问-SQL语言进行连接数据库服务器-DB-Library:DB-Library

    ylbtech-数据库访问-SQL语言进行连接数据库服务器-DB-Library:DB-Library 1.返回顶部 1. 在基于三层构架的信息系统开发中,应用服务器要利用SQL语言进行连接数据库服务 ...

  6. Emmet - 自动补全 JSX

    VSCode 中设置"emmet.syntaxProfiles": {"javascript": "jsx"} reactjs - JSX ...

  7. QTP 11 补丁大全

    原文: http://relevantcodes.com/qtp-11-0-patches/ Patch Link Details Support for Chrome 19 QTPWEB_00102 ...

  8. EL表达式.jsp指令等

    1.JSP标准指令:<%@ 标准指令(属性 )%><%@ page %><%@ include %><%@ taglib %> 2.JSP程序代码元素: ...

  9. MVC Html.AntiForgeryToken(); 防止跨站伪造请求(建议所有表单提交都加这个)

    视图页面from表单中添加 @Html.AntiForgeryToken(); 然后每个表单提交的时候都会带__RequestVerificationToken 字段 后端控制器验证时添加  [Val ...

  10. CentOS7 修复MBR引导

    为了达到实验目的,首先破坏MBR引导bootloader 重启系统发现系统进不去了,这正是我们想要的 重启进入系统救援模式,输入以下命令重建MBR引导bootloader 重启,可以正常引导进入系统