$LCT$维护子树信息学习笔记
\(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\)模拟某种染色过程?
不就是有些边不能连吗?信息还是直接加加减减来维护,连边特判就行了。
那为什么历史那题要写这么久?
我菜。
所以这个还是比较简单的,毕竟目前没写到太喵的做法。
那么就这样了。
随机推荐
- GPG(pgp)加解密中文完整教程
一.介绍 我们都知道,互联网是不安全的,但其上所使用的大部分应用,如Web.Email等一般都只提供明文传输方式(用https.smtps等例外).所以,当我们需要传输重要文件时,应该对当中的信息加密 ...
- 物联网消息队列协议MQTT
简介Mqtt是一个物联网消息传输协议 mosquitto是mqtt协议的一个开源实现,http://mosquitto.org/ paho是mqtt协议的客户端实现,这里主要用paho的mqtt ja ...
- #20175201张驰 实验三 敏捷开发与XP实践
实验步骤 (一)敏捷开发与XP 一.敏捷开发与XP实践-1 ①实验要求: 敏捷开发与XP实践 http://www.cnblogs.com/rocedu/p/4795776.html, Eclipse ...
- malloc(50) 内存泄露 内存溢出 memory leak会最终会导致out of memory
https://en.wikipedia.org/wiki/Memory_leak In computer science, a memory leak is a type of resource l ...
- iview在项目中遇到的坑
1.下拉框选中某一项搜索发现总是搜不到,最后发现是选中后选中值后边莫名多了很长的空格,原因很简单,在代码中opction闭合标签和主体没有在一行. 2.iview+vue项目中,用百分比或者displ ...
- 45 MySQL自增id
45 MySQL自增id 表定义自增id 说到自增id,前面提到mysql的自增id不连续,当表定义的自增值达到上限后的逻辑是:再申请下一个id时,得到的值保持不变 ; insert into t v ...
- uni-app-小程序中组件不支持id选择器等
这个问题刚开始遇到的时候有点搞笑啰,正常情况下,id选择器不是最正常的吗?搞锤子哦. 接着我就找度娘了 ,官网给出的解释是:https://developers.weixin.qq.com/mini ...
- jmeter逻辑控制详解(1)
逻辑控制器 Jmeter提供了多种逻辑控制器,下面进行讲解说明: 1.Simple Controller 简单控制器是最基本的控制器,对jmeter测试运行没有任何影响,可以将某些请求归集在一个简单控 ...
- The bean 'dataSource', defined in BeanDefinition defined in class path resou
SpringCloud对应SpringBoot不匹配 Greenwich 2.1.x Finchley 2.0.x Edgware 1.5.x Dalston 1.5.x SpringBoot Spr ...
- 关于fork
关于fork 之前和同学讨论了一个关于fork的问题,之前自己也是稍微看过一点,但是具体的也不是太了解,这样还是很不好的. 具体的问题来源于一个面试题,大概是问 fork||fork操作会生成几个新的 ...