
LCT
文章平均质量分 92
zxyoi_dreamer
退役了退役了爬了爬了,搞个锤子算法竞赛,不如好好享受大学生活。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【校内模拟】小B的图(贪心)(MST)(LCT)
简要题意:给一张图,有两种边,第一种的权值为 v+xv+xv+x,其中 xxx 是变量,第二种的权值为 v−xv-xv−x。 现在给出若干 xxx 的值,请你求出MST的大小。分别只保留两种边的图仍然连通。题解:由于本身两种图是连通的,所以在新MST上的边只可能是原来两种边的MST中的边。将 v+xv+xv+x 拿来做MST,建立LCT。考虑用 v−xv-xv−x 来替换。注意替换顺...原创 2020-02-11 18:07:18 · 392 阅读 · 0 评论 -
【校内模拟】坦克(LCT)
简要题意见此:here题解:其实不是平面图也可以做,化边为点,边的权值设为删除时间,然后双指针就行了。代码:#include<bits/stdc++.h>#define ll long long#define re register#define cs constnamespace IO{ inline char gc(){ static cs int Rle...原创 2019-11-05 18:55:16 · 257 阅读 · 0 评论 -
【校内模拟】Growing(树哈希)(SBT)(LCT维护轻重链剖分)
简要题意:给一棵有根树,强制在线,支持动态加叶子,询问一个子树的自同构变换个数。题解:一句话题解:SBT+封装双哈希+原根倒base+LCT维护三个标记顺便说一下,博主并不清楚有没有什么离线处理方式以前确实没有见过LCT拿来维护轻重链剖分这种东西的。。。(LCT维护的东西一般称为虚实链剖分)首先考虑一个显然的暴力,维护树哈希,然后每次加叶子暴力跳所有父亲并修改哈希值,就可以直接维护答案...原创 2019-10-23 20:44:09 · 423 阅读 · 0 评论 -
【BZOJ2555】SubString(SAM)(LCT)
传送门题解:仔细想一想发现我们需要维护rightrightright集合的大小,也就是failfailfail树的子树大小由于强制在线,随便用LCT维护一下子树sizsizsiz即可。代码:#include<bits/stdc++.h>#define ll long long#define re register#define cs constnamespace...原创 2019-10-06 14:55:43 · 157 阅读 · 0 评论 -
【校内模拟】子串(SAM)(LCT)(主席树)
题解:最后实现注意一下字符串边界,LCT稍微考虑一下可以不用写cut。代码:#include<bits/stdc++.h>#define ll long long#define re register#define cs constnamespace IO{ cs int Rlen=1<<22|1; char buf[Rlen],*p1,*p2; i...原创 2019-09-30 21:15:12 · 322 阅读 · 0 评论 -
【CodeChef-PUSHFLOW】Push the Flow!(LCT)
传送门调了一上午,突然发现答案上界在2e9。。。拿出第一次提交的代码,把INF设成2e9,然后发现2e9+1e9炸int了,define int long long,就过了。。。所以我一上午调了个屁啊然后改了改,把可能爆long long的地方开了long long,感觉还行。题解:简单LCT练习题首先最大流=最小割,考虑求两点最小割。如果是树上的话,显然就是两点之间边权的最小值...原创 2019-09-29 14:50:07 · 284 阅读 · 0 评论 -
【ZJOI2016】大森林(LCT)
传送门题解:区间LCT种树离线,考虑这棵树和下一棵树的区别。其实就是需要把某些子树从一个点转移到另一个点。建立虚点,把一段时间内(两次改变生长节点之间)长出来的节点用一个虚点接起来,于是在改变生长节点的时候就可以直接用LCT把子树接过去了。没什么细节,xjb实现就行了。代码:#include<bits/stdc++.h>#define ll long long#...原创 2019-09-29 11:21:19 · 176 阅读 · 0 评论 -
【SDOI2017】树点涂色(LCT)(线段树)
传送门题解:这个操作非常LCT。。。显然操作111就是access。。。考虑怎么对操作222和操作333进行维护。如果没有操作3那就是LCTxjb维护的SB题注意到Splay维护的链一定是一条连续的祖先后代链。不会产生拐弯的情况。那么可以考虑差分,注意到一个点到根节点的答案就是它到根节点经过的Splay个数,记为dis[u]dis[u]dis[u]。操作222的答案就是dis[u...原创 2019-09-29 09:58:04 · 135 阅读 · 0 评论 -
【CF1137F】Matches Are Not a Child's Play(LCT)(树状数组)
传送门题解:考虑树上最大值和次大值,显然链接它们的链最后删除,且一定是从次大值向最大值一个一个删除。显然我们可以把树拆成若干条链,每条链上的点的删除顺序从一个端点依次向另一个端点。注意到拆成链之后每条链内部的点是一起删除的,而链与链之间的删除顺序由链上最大值来决定。定最大值所在节点为根,容易发现修改就是make_root,询问的话需要知道最大值小于该链最大值的链的siz总和,以及这条链...原创 2019-09-29 08:41:54 · 157 阅读 · 0 评论 -
【LOJ6041】「雅礼集训 2017 Day7」事情的相似度(SAM)(LCT)(树状数组)
传送门题面太暴力了题解:两个前缀的LCS就是SAM的fail树上的LCA。将询问按照rrr排序。暴力处理询问的方式就是跳fail树看有没有之前打上的标记。然后求一个后缀最大值。利用LCT的access来进行打标记,在切换儿子的时候将最大值扔到树状数组里面即可。代码:#include<bits/stdc++.h>#define ll long long#define...原创 2019-09-24 19:39:01 · 225 阅读 · 0 评论 -
【BZOJ2759】 一个动态树好题(LCT)
传送门题解:发现是个基环树森林。也就是仙人掌森林,俗称荒漠,直接上Link-Cut-Cactus就行了发现有的方程会形成环,我们对于每个连通块,定一个根节点,然后根节点的父亲设置为Special_Father。这样每次可以把环提取出来,得到根节点的解。然后access一下得到当前点与根节点的关系就可以直接算了。需要注意的修改的时候,对于修改的是否是环上的点需要大力分类讨论一下。代码:...原创 2019-09-09 09:45:17 · 252 阅读 · 0 评论 -
【BZOJ3514】Codechef MARCH14 GERALD07加强版(LCT)(主席树)
传送门题解:对于一堆不成环的边,显然连通块数量就是n−n-n−边数。LCT维护边标号的最大生成树,主席树维护一下有哪些边存在就行了。代码:#include<bits/stdc++.h>#define ll long long#define re register#define gc get_char#define cs constnamespace IO{ ...原创 2019-09-06 17:41:15 · 155 阅读 · 0 评论 -
【校内模拟】水题(斐波那契通项公式)(LCT)
题意从前有个斐波那契数列, 他不甘于生活在序列上,他决定做一个有梦想的数列,于是他找到了一棵树,想生活在一棵树上。但是树告诉他,你需要解决下面的问题,才能够有资格生活在树上。· 给出一棵原创 2019-09-01 20:00:11 · 316 阅读 · 0 评论 -
【SDOI2017】【洛谷P3781】切树游戏(FWT)(动态DP)(全局平衡二叉树)
传送门这篇博客主要是因为洛谷有毒瘤造了毒瘤数据卡树剖,所以只有全局平衡二叉树能过(而且代码还比树剖短。。。)并不想写题解,可以自己去洛谷题解区看。代码:#include<bits/stdc++.h>#define ll long long#define re register#define gc get_char#define cs constnamespace ...原创 2019-08-08 19:04:24 · 385 阅读 · 0 评论 -
【HDU4942】Game on S♂play(线段树)(LCT)
传送门其实发现一次旋转修改会对所有祖先产生乘上一个值的影响应该就很好直接上LCT了,但是乘000再除000就很麻烦。发现这个树是一个二叉查找树,于是在旋转过程中这个树表示的序列并不会变,于是每个子树对应的就是原序列上的一个区间。旋转的时候修改一下权值和,管辖子树范围, 查询的时候直接询问区间乘积即可。代码(中序遍历+线段树):#include<bits/stdc++.h>...原创 2019-08-05 21:30:56 · 187 阅读 · 0 评论 -
【SCOI2018】Tree(LCT)
描述在大小为 N 的树上,点从 1 到 N 标号,第 i 个点有权值 Ai,现在需要支持两 种操作:第一种操作格式为“1 U” ,表示询问从 U 出发的简单路径,经过的点权值 之和的最大值;第二种操作格式为“2 U V” ,表示将 U 的权值修改为 V。输入第一行两个整数 N 和 M,表示树的大小和操作数;第二行 N-1 个整数,第 i 个整数 Pi(1<=Pi<=i)表示...原创 2019-04-05 11:43:01 · 585 阅读 · 0 评论 -
【51nod1600】Simple KMP(SAM)(LCT)(差分)
传送门解析:想法是算出每次新加一个字符的贡献增量,也就是差分数组。我们发现每次新加入一个字符,会产生lenlenlen个新的后缀,lenlenlen是加入前字符串的长度。而在这些新的后缀的子串中,不是后缀的所有串的贡献其实就是之前作为过后缀的所有串的贡献,所以我们只需要算增量的差分数组,也就是二阶差分数组。所以我们需要考虑每一个后缀在之前的所有位置出现了多少次。显然我们直接提取最后插...原创 2019-04-04 09:18:29 · 236 阅读 · 0 评论 -
2019.03.24【SPOJ-GSS7】Can you answer these queries VII(LCT)
传送门解析LCT维护GSS系列操作不想解释。。。代码:#include<bits/stdc++.h>#define ll long long#define re register#define gc get_char#define cs constnamespace IO{ inline char get_char(){ static cs int Rle...原创 2019-03-24 23:28:20 · 203 阅读 · 0 评论 -
2019.03.21【SPOJ-QTREE7】Query on a tree VII(LCT)
传送门解析:还是和前面六道差不多的套路,放弃makeroot,连父亲,用根的右儿子表示当前联通块,开一个multiset维护虚子树的信息,access的时候切换一下。只需要在更新权值的时候在两个LCT里面都更新一下信息就行了。代码:#include<bits/stdc++.h>#define ll long long#define re register#defin...原创 2019-03-21 20:13:56 · 180 阅读 · 0 评论 -
2019.03.21【SPOJ-QTREE6】Query on a tree VI(LCT)
传送门解析:其实说白了就是改变颜色,查询同色联通块大小。有一个显然的做法就是维护两棵LCT,在改变颜色的时候该连的连,该断的断。嗯,很显然会被菊花图卡掉。考虑将所有点在同色的LCT中与父亲相连。同时111的父亲设置为虚点n+1n+1n+1。放弃makeroot操作,我们发现linklinklink和cutcutcut总是有明确的父子关系,魔改了。上套路,维护虚子树大小。对于询问,...原创 2019-03-21 20:08:41 · 199 阅读 · 0 评论 -
2019.03.21【SPOJ-QTREE5】Query on a tree V(LCT)
传送门解析:维护的东西和QTREE4大同小异。但是由于不用维护全局答案且边不带权,比QTREE4好写到不知道哪里去了。开一个multiset记录从每个虚子树叉出去的最近距离。用siz表示当前链长,lmnlmnlmn表示从链顶叉出来的最小距离,rmnrmnrmn表示从链底叉出去的最小距离,于是就可以非常愉快的转移了。询问的时候直接access将当前点变成链底然后用rmnrmnrmn回答就...原创 2019-03-21 19:38:17 · 191 阅读 · 0 评论 -
2019.03.21【SPOJ-QTREE4】Query on a tree IV(LCT)
传送门解析:考虑用LCT来乱搞,同时维护一些简单的子树信息就可以乱搞了。首先我们将边权下放到每个儿子节点处方便维护,同时放弃LCT中的makeroot操作(不然没法维护)。每个点开两个multiset,一个维护所有虚子树中的答案,另一个维护所有从当前点叉出去到每个虚子树中白点的最远距离。显然我们只需要在access的同时根据虚实链的变化来同步维护这两个multiset就行了。现在考虑...原创 2019-03-21 19:27:36 · 324 阅读 · 0 评论 -
2019.03.04【ZJOI2018】【BZOJ5212】【洛谷P4338】历史(假LCT)
洛谷传送门BZOJ传送门解析:其实就是给你一颗LCTLCTLCT,初始全部都是虚边,111恒为根。给出每个点accessaccessaccess的次数,求出所有方案中,切换实链的最大次数。你问我为什么这个和原题意是等价的?自己对断实链,连实链的情况分类讨论啊。于是我们现在考虑每个点的实链的变化,显然只有它和它子树内节点的accessaccessaccess能够影响到它的实链。而同一个子...原创 2019-03-04 22:14:25 · 205 阅读 · 0 评论 -
2019.01.24【THUWC2017】【BZOJ5020】【洛谷P4546】在美妙的数学王国中畅游(LCT)(泰勒展开)
BZOJ传送门洛谷传送门解析:题目下方有一个提示。就是泰勒展开。不过这道题的泰勒展开还算简单。思路:泰勒展开能够让我们将误差控制在一定范围的同时,快速维护多个函数的和。主要思想是将非多项式函数拆成多项式维护每一项的系数。如果对导数不是很了解的话可以看一下这篇博客:https://blog.csdn.net/qq_35649707/article/details/74611460...原创 2019-01-24 12:06:55 · 196 阅读 · 0 评论 -
2019.01.20【TJOI2015】【BZOJ3999】【洛谷P3976】旅游(LCT)
BZOJ传送门洛谷传送门解析:这类路径问题LCT和链剖都能做,不过LCT空间常数较小而时间常数较大,链剖空间常数较大且复杂度不够优秀,但是时间常数优秀。思路:考虑LCT上每个Splay维护这一部分链的信息怎么更新。首先需要记录最大值和最小值,用于计算最后的收益。考虑定向统计,从深度小的向深度大的走。由于makerootmakerootmakeroot操作的存在(主要是因为翻转),...原创 2019-01-20 14:01:54 · 244 阅读 · 0 评论 -
2018.12.12【BZOJ5192】【洛谷P4271】New Barns(LCT维护直径)
BZOJ传送门洛谷传送门解析:许久没有写LCT,手都有点生了。思路:这道题是显然的需要维护直径的,因为有结论,树上距离一个点的最远点一定是某个直径的端点。证明很显然,就不证了。那么怎么维护动态的直径呢?我们可以用LCT维护一个森林,对于每棵树记录直径的两个端点,加入一个新点的时候更新,我们有如下结论:新的直径与原来直径至少有一个端点重合。那么LCT乱搞一波就做完了。代码:#...原创 2018-12-12 17:26:00 · 493 阅读 · 0 评论 -
2018.11.19【NOIP2018】【洛谷P5024】保卫王国(LCT)
传送门解析:真的令人窒息今年这道题。。。思路:首先我们要先会O(nm)O(nm)O(nm)的DPDPDP做法。考虑每个位置DP出选与不选在的最小代价。显然随手就转移了。然后限制就是把所有限制不能取的方案的代价设置成INFINFINF,然后就可以DP乱搞了。然后我们发现每次修改的只有点到rootrootroot的路径上的决策。于是就可以LCTLCTLCT维护每条链上的决策了,用矩...原创 2018-11-19 20:50:38 · 414 阅读 · 0 评论 -
2018.10.08【BZOJ2631】tree(LCT)
DarkBZOJ传送门解析:其实就是这道题放到了LCTLCTLCT上来做,其实操作基本都是一样的。拿来做LCTLCTLCT的练手题还不错。代码:#include<bits/stdc++.h>using namespace std;#define ll long long#define re register#define gc getchar#define pc...原创 2018-10-08 21:33:33 · 136 阅读 · 0 评论 -
2018.10.08【HNOI2010】【BZOJ2002】【洛谷P3203】弹飞绵羊(LCT)
BZOJ传送门洛谷传送门解析:LCTLCTLCT裸题啊。。。思路:可以很显然的发现不管怎么变,我们设置虚拟节点n+1n+1n+1,所有点到它的路径构成一棵树。那不就完了,直接LCTLCTLCT维护这棵路径树的形态,路径上经过多少点就是要被弹多少次,在LCTLCTLCT的节点里维护sizsizsiz,最后提取路径,siz−1siz-1siz−1就是最终答案。代码:#include...原创 2018-10-08 14:44:33 · 138 阅读 · 0 评论 -
2018.10.07【BZOJ1180】OTOCI(LCT)
传送门解析:LCTLCTLCT裸题。就常规的LCTLCTLCT操作维护链上求和就行了啊。真是少有的让我都能写出一句话题解的题目了。代码:#include<bits/stdc++.h>using namespace std;#define ll long long#define re register#define gc getchar#define pc pu...原创 2018-10-07 23:51:32 · 162 阅读 · 0 评论 -
2018.10.07【NOI2014】【BZOJ3669】【洛谷P2387】魔法森林(LCT)(最小生成树求瓶颈路)
BZOJ传送门洛谷传送门解析:这道题是经典的LCTLCTLCT在线求最小生成树的应用。思路:直接做显然很麻烦,就算你知道怎么求瓶颈路也很麻烦,因为这是要求两个最大值的和最小,没有办法直接贪心。那么我们换一个思路,先确定aaa最大值,然后再考虑在这个最大值下我们能够获得的尽可能小的路径上最大的bbb。那么我们需要将所有边以aaa为第一关键字从小到大排序,然后做出在限制aaa的最大值的...原创 2018-10-07 22:47:54 · 190 阅读 · 0 评论 -
【模板】LCT求最小生成树
参考题目:洛谷P3366解析:联赛完后统一更模板题解析。代码:#include<bits/stdc++.h>using namespace std;#define ll long long#define re register#define gc getchar#define pc putchar#define cs constinlineint geti...原创 2018-10-07 20:15:11 · 427 阅读 · 0 评论 -
【模板】Link-Cut-Tree
参考题目:洛谷P3690解析:联赛完后统一更模板题解析。代码:#include&amp;amp;lt;bits/stdc++.h&amp;amp;gt;using namespace std;#define ll long long#define re register#define gc getchar#define pc putchar#define cs constinlineint geti...原创 2018-10-07 18:40:45 · 177 阅读 · 0 评论 -
2018.10.07【SDOI2008】【BZOJ2049】【洛谷P2147】Cave洞穴勘测(LCT)
BZOJ传送门洛谷传送门解析:这是一道LCTLCTLCT的裸题,却不够板。思路:这是LCTLCTLCT的一个经典应用,维护动态树上节点的联通性。对于基本操作我不再赘述,详见我的LCTLCTLCT模板(暂未更新)。这道题就讲一讲怎么维护联通性。由于同一联通块中的节点是由几条被SplaySplaySplay维护的重链所覆盖的,我们判断连通性的时候只需要将一个节点变为该联通子树的根,然...原创 2018-10-07 12:02:11 · 159 阅读 · 0 评论