随笔分类 - 数据结构--LCT
摘要:题面 "传送门" Sol 考虑求每个串在模板串中出现的次数 就在$sam$上走就行了,因为它的每一条路径都是它的一个子串 走到最后一个点,若匹配,那么它的答案就是$parent$树的这个点的子树大小 然后带修改就写个$LCT$维护$parent$树就好了 $LCT$维护子树信息,非常好写 cpp i
阅读全文
摘要:题面 "传送门" Sol ~~我太菜了,有点思维的题根本不会~~ $sto \ HJT$ 考虑一个$1$操作,相当于是$l 1$和$l$处长节点的位置不同了 那么在$l 1$处长,然后接在$l$就好了 $r$和$r+1$同理 考虑怎么来做 虚点的思想 维护一个全局的树,上面有虚点和实点 每次$0$操
阅读全文
摘要:题面 "传送门" Sol ~~以下多数东西都是复制题解的~~ 外省体验赛这题顺利获得了$10$分的好成绩。。。 显然是$Access$操作,已知每个点$Access$的次数,确定一种顺序,问轻重链切换次数的最大值 考虑$i$处的切换次数,如果连续两次$Access$在同一子树或者都是它自己,那么显然
阅读全文
摘要:题意 一棵树,每个点初始有个点权和颜色 $0 \ u$ :询问所有$u,v$ 路径上的最大点权,要满足$u,v$ 路径上所有点的颜色都相同 $1 \ u $:反转$u$ 的颜色 $2 \ u \ w$ :把$u$ 的点权改成$w$ $color_i∈[0,1],w_i∈[−10^9,10^9],n,
阅读全文
摘要:题意 给你一棵$n$个点的树,编号$1$~$n$。每个点可以是黑色,可以是白色。初始时所有点都是黑色。有两种操作 $0\ u$:询问有多少个节点$v$满足路径$u$到$v$上所有节点(包括)都拥有相同的颜色 $1\ u$:翻转$u$的颜色 Sol $LCT$做法: 黑白开两个$LCT$ 然后有一个很
阅读全文
摘要:LCT: 类似于树链剖分吧~~我是这么认为的~~ 要学会LCT首先你要先学会Splay及其 区间翻转操作 基础 辅助树: ①Splay以深度为为关键字,维护每条链的信息( 每条链一个splay ) ②其根的父亲指向这条链的链顶的父亲 ③记住每次splay时要先 从上往下 下放lazy 操作 判断是否
阅读全文
摘要:Sol $LCT$动态维护树重心 方法一 因为只有加边,所以可以暴力启发式合并,维护重心 维护子树信息,子树大小不超过一半 复杂度两只$log$ 方法二 扣出两个重心的链,链上二分找 每次$Splay$重心,应该是一只$log$的吧。。。 cpp include define RG register
阅读全文
摘要:题面 "luogu" Sol 好久没写$LCT$ 然而写跪了$TAT$ 把边从小到大加入森林 如果形成环,就替换最小的边 如果已经是树,更新答案 $LCT$维护 cpp include define RG register define IL inline define Fill(a, b) mem
阅读全文
摘要:题面 "Bzoj" Sol 做个转化 最开始都是虚边 操作$1$就是$LCT$里的$Access$操作 求的就是路径上虚边的个数+1 然后就好办了 用树链剖分+线段树来维护每个点到根虚边的个数的最大值 操作$1$:$Access$时虚实边的转换,要把原来连的点的$Splay$的最左边的点在原树中的子
阅读全文
摘要:题面 "UOJ" Sol 神题 给每个点对随机一个权值,把这两个点的权值异或上这个随机的值 用$LCT$维护子树信息,若子树异或和为所有点对的异或和那么就是答案 大常数代码 cpp include define RG register define IL inline define Fill(a,
阅读全文
摘要:题面 "传送门" Sol 首先每次加入边的两个点不联通,那么联通块的个数就要减$1$ 那么考虑怎么做 莫名想到$LCT$ 然后就不会了。。。 $orz$题解 维护一个每条边的数组,如果这个点加入后形成环,那么就把这个数组设为环内最先加入的边的编号,特判自环,然后替换这条边 没有替换为$0$ 那么每次
阅读全文
摘要:题面 "传送门" Sol $LCT+$并查集维护双联通分量,每次加边$x,y$,如果已经相连就把这条路径缩成一个点,赋上权值 $LCT$调用$fa$时一定要在并查集中$find$一下 细节很多,常数很大 cpp include define IL inline define RG register
阅读全文
摘要:题面 "传送门" Sol "LCT维护子树和" include define IL inline define RG register define ls ch[0][x] define rs ch[1][x] define Fill(a, b) memset(a, b, sizeof(a)) us
阅读全文
摘要:题面 "没有权限号的可以去LOJ" Sol 大家都知道,$LCT$上有许多实边和虚边 实边就是每棵$Splay$上的既认父亲又认儿子的边 虚边就是$Splay$和$Splay$之间只认父亲的的边 那么每个点就有它的虚儿子和实儿子,实际上虚儿子才是它在$LCT$维护的树上的真正的儿子 当你$Acces
阅读全文
摘要:题面 "传送门" Sol 这不是一道LCT模板题吗? 和线段树一样维护区间加法和乘法标记 记得要更新自己本身的权值 ~~这种题就该一遍AC~~ cpp include define RG register define IL inline define Fill(a, b) memset(a, b,
阅读全文
摘要:"bzoj5020" $$答案误差只要小于 10^{ 7}$$ 题解 Taylor展开式: $$若f(x)的n阶导数在[a, b]内连续,则f(x)在x_{0}\in[a, b]可表示为$$ $$f(x)=\sum_{i=0}^{n} \frac{ f^{(n)}(x_{0})(x x_{0})^{
阅读全文
摘要:这道题可以用LCT做,开set,LCT,二叉树 操作1:直接开set,找到它要插入的位置,一定是前驱,后缀中deep最大的(显然手玩) 操作2:set+LCT询问路径,直接手动提上去,因为树的形态不变 操作3:同2 操作4:LCT::Cut,手动删除 操作5:同4 没了 记得手动更新二叉树(这个一定
阅读全文
摘要:luogu题面 这道题是NOI起床困难综合症改编而来的 思路是一样的 这道题我们考虑用LCT维护,每个节点维护两个值 一个为中序遍历这棵子树的ans0,ans1(分别表示0和INF(二进制下全为1)跑的答案) 另一个为中序遍历的反向遍历这棵子树的ans0,ans1 还要记得保存这个点的初始操作 考虑
阅读全文
摘要:LCT a排序后做b的kruskal splay维护最大边的位置,若当前大,不加,否则cut,加边 # include <stdio.h> # include <stdlib.h> # include <iostream> # include <algorithm> # include <strin
阅读全文
摘要:LCT 暴力建图后只有cut link 建个超级点 次数即size # include <stdio.h> # include <stdlib.h> # include <iostream> # include <algorithm> # include <string.h> # define IL
阅读全文

浙公网安备 33010602011771号