随笔分类 -  数据结构——LCT

摘要:XII.小清新数据结构题 太 清 新 了 话说就我一个人看到这道题后兴冲冲的以为暴力LCT就能过然后发现LCT如果维护子树信息的话只有根节点处的信息是正确的吗(没错,就我一个) 闲话少说,正片开始。 法一:推一种式子,然后LCT/树剖维护 我们设valii节点的值,然后sumi为根 阅读全文
posted @ 2021-04-01 13:04 Troverld 阅读(71) 评论(0) 推荐(0) 编辑
摘要:VII.[BZOJ2555]SubString 如果要在动态建SAM的过程中同时维护parent tree中的子树和,明显需要一种支持修改树的数据结构来维护。显然,这里应该使用LCT。 维护子树和,可以考虑LCT中经典的记录虚子树和的trick。然后剩下就是俩模板的拼接了。 不知道为什么,交上去会M 阅读全文
posted @ 2021-04-01 12:01 Troverld 阅读(63) 评论(0) 推荐(0) 编辑
摘要:XXVI.[AH2017/HNOI2017]单旋 先从单旋最小/大值的操作看起。手动模拟一下的话就会发现它对整棵树的形态几乎没有影响,就是断开最小值与它父亲的连边,并用其原本的右儿子(如果存在)替代。之后,将整棵树的根设作其新右儿子。最大值同理。 然后删除最小值也类似。注意删除一个原本就在树顶的最小 阅读全文
posted @ 2021-03-31 16:42 Troverld 阅读(91) 评论(0) 推荐(0) 编辑
摘要:XXV.Sasha and Algorithm of Silence's Sounds 假设我们把区间[l,r]\(\)[l,r]作为子区间的区间,都是不合法的。 于是我们对于每个位置l,都可以找出其最右边的不成环的位置r阅读全文
posted @ 2021-03-31 16:37 Troverld 阅读(55) 评论(0) 推荐(0) 编辑
摘要:XXIV.CF482E ELCA Difficulty 3200的大神题。 这题维护应该很好想:与其维护所有对的LCA,不如维护一个数是多少对的LCA。显然,这个数量应该为szx2ysonxszy2。其中szxx子树的大小,sonx阅读全文
posted @ 2021-03-31 16:35 Troverld 阅读(57) 评论(0) 推荐(0) 编辑
摘要:XXIII.CF603E Pastoral Oddities 结论1:只有点数为偶的连通块,才有可能使每个点的度数为奇。(偶连通块的必要性) 证明1:如果在奇连通块中,每个点的度数为奇,则总度数为奇,但是总度数必定是偶数(每条边增加两点度数),因此不可能存在奇的合法连通块。 结论2:任何点数为偶的连 阅读全文
posted @ 2021-03-31 16:34 Troverld 阅读(60) 评论(0) 推荐(0) 编辑
摘要:XXII.SP16580 QTREE7 - Query on a tree VII 它来了,它来了!LCT树套树的经典题,它来了! 虽然只是LCT套 std::multiset 而已 这题具体过程同QTREE6,不再赘述。唯一有区别的是,这题需要维护的是虚子树中最大值,不具有可减性。 因此,我们采用 阅读全文
posted @ 2021-03-31 16:32 Troverld 阅读(34) 评论(0) 推荐(0) 编辑
摘要:XXI.[ZJOI2016]大森林 论LCT的百种用法系列 这题有几个性质: 1.询问与时间无关。因为只是添加新点,原来点之间的位置关系不变。因此只要询问的两个点都被建出来了,何时进行询问并无影响。 2.操作重叠的部分很多。因为我们不管怎么加点,即使是加原树中没有的点,仍然有原来点之间的位置关系不变 阅读全文
posted @ 2021-03-31 16:30 Troverld 阅读(58) 评论(0) 推荐(0) 编辑
摘要:XX.SP16549 QTREE6 - Query on a tree VI 本题LCT全方面爆破树剖——无论是复杂度、码量、思维难度、代码难度,全都碾压树剖。并且,LCT容易模板化,但是树剖不容易——树剖搭配的线段树因题而异,而LCT只需要把pushuppushdown稍微改改就可以直接 阅读全文
posted @ 2021-03-31 16:27 Troverld 阅读(65) 评论(0) 推荐(0) 编辑
摘要:XIX.首都 一句话题意:维护一棵森林,支持查询某棵树的重心以及所有树的重心的异或和。 众所周知,重心有如下性质:将两棵树之间连一条边后,新树的重心在原两棵树重心的连线上。 根据这一性质,我想了半天也没有想出来什么美妙的算法主要还是我splay没学好 首先,这道题正解有两个,一是LCT+启发式合并( 阅读全文
posted @ 2021-03-31 16:24 Troverld 阅读(66) 评论(0) 推荐(0) 编辑
摘要:XVIII.最小差值生成树 这题m2暴力求最小生成树应该是过不去的……估计只有LCT能过去了。 然后就是同IV.[NOI2014]魔法森林一致的方法,排序之后暴力断边连边即可。 注意会有自环!!!虽然我也不知道为什么没判自环算我MLE…… 代码: #include<bits/stdc++.h> 阅读全文
posted @ 2021-03-31 16:23 Troverld 阅读(70) 评论(0) 推荐(0) 编辑
摘要:XVII.[SDOI2017]树点涂色 树剖和LCT学到最后实际上是殊途同归的……就比如说这题,可以用树剖,但是在操作1中借鉴了LCT的跳链思想;LCT则因为不能子树修改,按照dfs序需要建出线段树出来,实际上也就是树剖的思想了。 首先讲一下LCT写法。观察到任意时刻,任意一种颜色一定是一条深度 阅读全文
posted @ 2021-03-31 16:21 Troverld 阅读(67) 评论(0) 推荐(0) 编辑
摘要:XVI.二分图 /【模板】线段树分治 本题有两种做法。一是所谓的“正解”线段树分治,复杂度O(nlognlogk)。思路比较简单,敲起来也简单,就是复杂度不太优秀。 代码: #include<bits/stdc++.h> using namespace std; #define lson 阅读全文
posted @ 2021-03-31 16:19 Troverld 阅读(75) 评论(0) 推荐(0) 编辑
摘要:XV.[USACO18FEB]New Barns P 这种东西应该怎么维护呢?这是子树最大值呀。 一种方法是用平衡树(例如 std::multiset )维护轻儿子长度集合。但是这种东西太麻烦,太恶心了。 考虑直径的性质。我们给出两条引理: 引理1:假如有一条直径(p,q),那么树中任意一个点$ 阅读全文
posted @ 2021-03-31 16:17 Troverld 阅读(342) 评论(0) 推荐(0) 编辑
摘要:XIV.[BZOJ3159]决战 你们知道吗!把一行 #define int long long 写在了一行 int 的后面然后 debug 了一整天的崩溃你知道吗!!! 我恨不得罢免了自己! 言归正传。 从某种角度来说,这是我写的第一棵树套树!虽然是邪教般的LCT套splay 首先,除了翻转操作以 阅读全文
posted @ 2021-03-31 16:15 Troverld 阅读(77) 评论(0) 推荐(0) 编辑
摘要:XIII.[TJOI2015]旅游 我至今还记得做毒瘤树剖题和毒瘤线段树题时那一坨坨触目惊心的 pushup 和 pushdown …… 这题是可以用树剖做的。但是,我还是选择了LCT。 在每个节点,我们维护如下值: mx :子树最大值 mn :子树最小值 lmx :从左往右走,最大收益(即要求的东 阅读全文
posted @ 2021-03-31 16:13 Troverld 阅读(50) 评论(0) 推荐(0) 编辑
摘要:XII.[ZJOI2012]网络 这题还以为有什么高端做法呢,一看C10,这题就算结束了。 它的那个限制翻译成人话就是“无论何时,任何颜色的边总是构成一条条链”。然后换颜色就暴力连边断边即可。 代码: #include<bits/stdc++.h> using namespace st 阅读全文
posted @ 2021-03-31 16:11 Troverld 阅读(47) 评论(0) 推荐(0) 编辑
摘要:XI.[BJOI2014]大融合 终于来了……我们终于要用LCT来维护子树信息了。 因为我们看到,LCT是通过将原树拆成一堆链而起效的。在树链剖分中,我们通过dfs序来访问一棵子树;但是因为LCT的链是动态变化的,因此并没有一组固定的访问顺序。 那怎么办呢? 我们考虑最原始的想法:对于每个节点,再额 阅读全文
posted @ 2021-03-31 16:08 Troverld 阅读(68) 评论(0) 推荐(0) 编辑
摘要:X.[WC2006]水管局长 或许我这题应该放到V.[NOI2014]魔法森林前面的QaQ? 这题首先一眼看出翻转加边顺序。然后,动态维护最小生成森林,这样保证最小生成森林上的路径上的最大值就是原图中路径的最大值的可能的最小值。反正随便写写就行了。 代码: #include<bits/stdc++. 阅读全文
posted @ 2021-03-31 16:06 Troverld 阅读(36) 评论(0) 推荐(0) 编辑
摘要:IX.[BZOJ4998]星球联盟 这题就比较套路了(虽然我的程序还好好让我debug了一会),比上一题还要简单,直接暴力维护点双即可。 代码: #include<bits/stdc++.h> using namespace std; #define lson t[x].ch[0] #define 阅读全文
posted @ 2021-03-31 16:04 Troverld 阅读(85) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示