首页 > TAG信息列表 > LCT
动态树 $\text{LCT}$ 习题篇
目录\(\text{LCT}\) 练习P3203 [HNOI2010]弹飞绵羊P2147 [SDOI2008] 洞穴勘测 \(\text{LCT}\) 练习 P3203 [HNOI2010]弹飞绵羊 思路: 我们假设弹飞就是弹到装置 \(\text{n+1}\) 那么显然这道题就转变为: 对于每个点 \(i\) 都有一个值 \(k_i\),若是 \(i+k_i>n\) 则 \(i\to n+1\) 连一动态树 $(LCT)$
目录动态树 \((LCT)\)前言基本思路及实现\(\text{Part I}\) 实链剖分\(\text{Part II Splay}\)\(\text{Part III}\) 核心操作 【模板】动态树(\(\text{Link Cut Tree}\)) 动态树 \((LCT)\) 前言 \(\text{LCT}\),全名 \(\text{Link Cut Tree}\),一般基于 \(\text{Splay}\) + 实链剖分动态树之 Link Cut Tree 学习笔记
LCT 题单做题记录 一、维护链信息 P3203 [HNOI2010]弹飞绵羊:维护一条路径的长度,由于题目大大降低了难度,所以只需要使用 \(access\) 和 \(splay\) 两个操作即可。要学会灵活应用 LCT 中的函数,不要有刻板思维(如改变 \(cut\) 函数的写法)。 P1501 [国家集训队]Tree II:需要维护加标LCT 板子
namespace LCT { int f[N], c[N][2], s[N], st[N]; bool r[N]; inline bool nroot(int); inline void pushup(int); inline void pushr(int); inline void pushdown(int); inline void rotate(int); inline void splay(int); inline void access(int); inline void makeroot(iLGP4365口胡
上来先留个心眼看看模数是不是质数 是质数啊那没事了 注意到值域和节点数量都相当小。这引导我们去枚举某个节点或某个值。 我们枚举潜入的城市 \(u\),找出 \(d_v\) 比 \(d_u\) 大的所有 \(v\)。 可以知道我们要选的一定是一个连通块,这个连通块中只能恰好包括 \(k-1\) 个 \(v\)。LCT学习笔记
概念 前置芝士:链剖分 链剖分:指一类对树的边进行划分的操作,这样做可以减少某些链上的修改、查询等操作的复杂度。链剖分分为重链剖分,实链剖分和长链剖分(不常见)。 重链剖分:实际上树剖就是重链剖分的常用称呼。可以看看 树链剖分学习笔记 实链剖分:同样将某一个儿子的连边划分为实边,[ZJOI2016]大森林
复盘 \(\text{zzq}\) 讲的题,来写篇题解祸害社会。 可能是更好做的想法。 Description 给定 \(n\) 棵树和 \(m\) 次操作,其中每棵树均有一个初始节点(并设定为“生长节点”),操作格式有三种: 给定 \(l\) 和 \(r\) ,让区间 \([l,\ r]\) 内所有树的生长节点下添加一个子节点,子节点序号为LCT 学习笔记
LCT 学习笔记 还在更新…… 看看学弟们几天后会把 LCT 给卷了:cntnow = 0 LCT 好难啊呜呜呜 这 LCT,尤其是 makeroot 中的区间翻转一步,根本不是人想到的。 虽然 Splay 也不是人想到的。 写了一些忽然发现网上有写的很好的了,那就这样,图直接放人家的,主要用来存代码方便背代码( 再写这样重修 LCT
Link Cut Tree 可以理解为动态的树链剖分,且链的维护是 splay。 在这之前一定要把 splay 写熟练了,不然吃大亏。 splay 板子来这里 P3690 【模板】动态树(Link Cut Tree) 指针版 Code 不好意思只会写指针版的动态树基础
Dynamic Tree 前置知识:线段树 Splay 维护区间翻转,\(O(n)=10^6\) 显然,这样的操作不能用线段树来维护,因为线段树的结构是固定的,我们需要一种结构上更加灵活的数据结构 于是联想到平衡树,如果以,对于一个区间 \([l,r]\),我们只需要知道 \(l-1\) 和 \(r+1\) 在平衡树上的位置就可以了,其联合省选 2022 混混记
停了两周课,却每天都很颓,还是那么菜。 要是能有 KJGKMTZB 一半卷就好了。 DAY 0 打板子。 上午打了 SA,SAM,树剖,整体二分。多项式开根没调出来。 下午在初中部试机,和 KJGKMTZB 竞速,他 NTT 我 FFT 写洛谷板子,我略胜一筹。 本来想竞速 LCT ,发现我已经忘光了,好菜啊我。 然后他打 LCT#LCT,树状数组#CF1137F Matches Are Not a Child's Play
题目 分析 考虑从删除序列末尾来看,最大值一定在末尾, 然后与次大值之间夹了整条路径的点,降序以此类推 实际上从小到大是每个点到最大点的路径被打通的过程,由此分成若干条实链。 删除序列的位置实际上是到实链底端的距离加上其它实链底端小于该实链底端的实链总长度之和。 考虑维护YbtOJ-毒瘤染色【LCT】
正题 题目大意 开始时有一张\(n\)个点没有边的图,\(q\)次操作加入一条边,如果加入后图是一个沙漠(只有边仙人掌的图)时才能够加入。 每次加入后询问:开始所有点都是白色,\(k\)次随机挑一个点染黑,求最后白色点的连通块数和黑色点的连通块数的和。 强制在线 \(1\leq n\leq 10^5,1\leq q\lLCT 小记
这次不是整活了,记个笔记,加深下印象。 \(\text{1. LCT}\) 引入 题目描述 给定 \(n\) 个点以及每个点的权值,要你处理接下来的 \(m\) 个操作。 操作有四种,操作从 \(0\) 到 \(3\) 编号。点从 \(1\) 到 \(n\) 编号。 0 x y 代表询问从 \(x\) 到 \(y\) 的路径上的点的权值的 \(\text{xLOJ #3540. 「JOI Open 2018」山体滑坡
LOJ #3540. 「JOI Open 2018」山体滑坡 设有无向图 \(G\),对于 \(G\) 的每一个极大连通块 \(T\) 求出其任意生成树 \(T'\),那么图 \(G\) 的极大连通块的个数就是 \(n-\sum|E_{T'}|\),其中 \(E_G\) 为图 \(G\) 的边集。因此,我们只需要求出 \(\sum|E_{T'}|\) 即可。 注意到在询LCT倾情压行板子
改考试题的时候突然发现LCT压疯了写出来还挺好看? 好像写得比DC还短。。 namespace LinkCut_Tree{ int fa[NN],val[NN],sum[NN],tag[NN],son[NN][2]; bool get(int x){ return x==son[fa[x]][1]; } bool isroot(int x){ return x!=son[fa[x]][0]&x!=son[fa[x]][1]; }P4338 [ZJOI2018]历史
首先可以根据题面描述大致想到这是一道绝对和 \(\text{lct}\) 有关的题。 询问你如何安排操作使得 Access 的复杂度最大。出题人干脆直接让你出数据卡满 \(\text{lct}\) 的复杂度了属于是。 链应该是可以拿的,我们考虑一下不带修。 对于一个节点,我们就考虑这个节点和其子树中关系LCT
Link-Cut Tree 前置芝士:Splay(可能还有树链剖分) 用途:主要维护树上路径信息,不过也还有一些奇怪的用途 需要支持的操作 首先,考虑一个问题: 对于一棵树,支持链加,链求和,换根 如果不换根的话,树剖很容易解决,更高效地,链加可以直接打标记解决,这启发我们维护节点到根的路径信息是比直接维洛谷 P3721 - [AH2017/HNOI2017]单旋(LCT)
洛谷题面传送门 终于调出来这道题了,写篇题解( 首先碰到这样的题我们肯定要考虑每种操作会对树的形态产生怎样的影响: 插入操作:对于 BST 有一个性质是,当你插入一个节点时,其在 BST 上的父亲肯定是,你把 BST 中父亲按权值 sort 一遍排成一列后,在待插入的数的两侧的数对应的节点中,深度Codeforces 1109F - Sasha and Algorithm of Silence's Sounds(LCT)
Codeforces 题面传送门 & 洛谷题面传送门 讲个笑话,这题是 2020.10.13 dxm 讲题时的一道例题,而我刚好在一年后的今天,也就是 2021.10.13 学 LCT 时做到了这道题。。。。。。 首先考虑一个区间的导出子图是一棵树的充要条件。显然这些点组成的边集不能有环,其次这些点组成的导出子图必[spojQTREE6]Query on a tree VI
考虑如下构造: 新建一条边$(0,1)$,并将原树以0为根建树,记$fa_{x}$为$x$的父亲(其中$1\le x\le n$) 维护两棵森林,分别记作$T_{0/1}$,每一条边恰属于一棵,其中$(x,fa_{x})\in T_{0}$当且仅当$x$为白色点 此时,考虑节点$x$的答案(不妨假设$x$为白色点),即是$T_{0}$去掉$x$所在连通块根节点(深度23th CSP 游记
2021.9.19 下雨好大 大概率是江浙沪的台风过来了 和wxy去考场,竟然还能挨着坐 用的Linux系统 没有GUIDE差评 vscode配置还算可以用,将就用吧 开始考试 T1 模拟,签到题 T2 对于相邻且相同的可以合并成一个数 之后模拟变成零的过程 删掉一个x位置时,设l=x-1,r=x+1 如果l,r都为零,ans-- l,rLCT
LCT (Link - Cut Tree) 今天,YCC 本来是想搞一搞数论,但是老吕说:今天我闲着,给你们讲一讲LCT。 可是,我不闲啊! LCT 是什么? 是一个由若干棵子结点无序的有根树组成的森林,支持对树的分割, 合并, 对某个点到它的根的路径的某些操作, 以及对某个点的子树进行的某些操作。 基本概念 原树:就LCT 学习笔记
推荐博文 文艺平衡树 LCT 的前置知识当然时文艺平衡树啦。先讲讲文艺平衡树。 题意 链接 给你一个长度为 \(n\) 的序列 \(a_i\),\(T\) 次操作,每次翻转一个区间,输出最后的序列。 题解 维护一个 Splay,一开始按照 \(a_i\) 为下标,\(i\) 为键值 进行建树,可以理解成键值就是这个点的深度[cf1137F]Matches Are Not a Child's Pla
显然compare操作可以通过两次when操作实现,以下仅考虑前两种操作 为了方便,将优先级最高的节点作为根,显然根最后才会被删除 接下来,不断找到剩下的节点中(包括根)优先级最高的节点,将其到其所在树根的所有节点从下到上依次加入到序列的开头并删除,不难发现最终得到的序列即为燃烧的顺序