随笔分类 -  数据结构

摘要:XII.[ZJOI2012]网络 这题还以为有什么高端做法呢,一看$C\leq 10$,这题就算结束了。 它的那个限制翻译成人话就是“无论何时,任何颜色的边总是构成一条条链”。然后换颜色就暴力连边断边即可。 代码: #include<bits/stdc++.h> using namespace st 阅读全文
posted @ 2021-03-31 16:11 Troverld 阅读(50) 评论(0) 推荐(0)
摘要:XI.[BJOI2014]大融合 终于来了……我们终于要用LCT来维护子树信息了。 因为我们看到,LCT是通过将原树拆成一堆链而起效的。在树链剖分中,我们通过dfs序来访问一棵子树;但是因为LCT的链是动态变化的,因此并没有一组固定的访问顺序。 那怎么办呢? 我们考虑最原始的想法:对于每个节点,再额 阅读全文
posted @ 2021-03-31 16:08 Troverld 阅读(90) 评论(0) 推荐(0)
摘要:X.[WC2006]水管局长 或许我这题应该放到V.[NOI2014]魔法森林前面的QaQ? 这题首先一眼看出翻转加边顺序。然后,动态维护最小生成森林,这样保证最小生成森林上的路径上的最大值就是原图中路径的最大值的可能的最小值。反正随便写写就行了。 代码: #include<bits/stdc++. 阅读全文
posted @ 2021-03-31 16:06 Troverld 阅读(49) 评论(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 阅读(96) 评论(0) 推荐(0)
摘要:VIII.[BZOJ2959]长跑 我想把出这么毒瘤的题的人拖出来揍一顿 这题稍微想想,就是动态维护点双连通分量并缩点,然后在缩出来的树上求两点距离。 思想简单但代码极其复杂。 首先,我们可以使用冰茶姬维护点双,所有的点全都并到一个冰茶姬中,除了冰茶姬的象征节点,其它的点一律全都删去,不保留任何信息 阅读全文
posted @ 2021-03-31 16:02 Troverld 阅读(63) 评论(0) 推荐(0)
摘要:VII.[SHOI2014]三叉神经树 LCT相较于树剖,最大的优势就是可以把一条链上的东西全整到一个splay里面,不像树剖在多个重链进行合并时会有很大麻烦。更好的是,LCT复杂度是$O(n\log n)$的,树剖不仅码量大,思路复杂,复杂度还是恶心的$O(n\log^2n)$。 这题就是典型的树 阅读全文
posted @ 2021-03-31 16:00 Troverld 阅读(116) 评论(0) 推荐(0)
摘要:VI.[SDOI2011]染色 你们知道吗?LCT考的就两个,一个$pushup$,一个$pushdown$。 这里就是经典的维护颜色段。在每个节点,我们维护四个值:\(lc\),左端颜色;\(rc\):右端颜色;\(sc\):区间颜色段数;\(col\):当前点的颜色。 然后就是经典的老套路了。 阅读全文
posted @ 2021-03-31 15:58 Troverld 阅读(64) 评论(0) 推荐(0)
摘要:V.[国家集训队]Tree II LCT维护这种东西是要比线段树要恶心的多的……毕竟线段树的区间大小是可以直接通过区间左右端点算出的,但是LCT就不行,必须手动维护。并且,线段树的维护是(左儿子+右儿子),但是LCT的维护是(左儿子+自己+右儿子)! 请务必先把线段树模板做掉,关于运算的优先级什么的 阅读全文
posted @ 2021-03-31 15:57 Troverld 阅读(68) 评论(0) 推荐(0)
摘要:IV.[NOI2014]魔法森林 前三题都是模板,是为了让我们练手的。 这题才是真正的挑战。 首先,一看这题既不加边也不删边,甚至连树都不是,还是道静态题,并且长得还贼像最小生成树,我就纳闷了,这是LCT? 还真是。 我们可以将边按照$a$排序。之后,我们维护一个关于$b$权值的动态最小生成树。 具 阅读全文
posted @ 2021-03-31 15:55 Troverld 阅读(83) 评论(0) 推荐(0)
摘要:III.[HNOI2010]弹飞绵羊 首先,可以发现,如果从一个装置的目标向这个装置连一条边,并且建立虚拟节点$n+1$,向所有可以弹飞的装置连边的话,这肯定构成一颗树。 理解就行。然后我们就可以在每个节点统计一个$size$,并用LCT在改变弹力系数时修改这棵树。则最终答案为: int ask(i 阅读全文
posted @ 2021-03-31 15:53 Troverld 阅读(60) 评论(0) 推荐(0)
摘要:II.[SDOI2008]洞穴勘测 也是近似的模板题,甚至比模板还要简单,连维护$pushup$都不需要。 主要是为了多敲几遍熟悉代码。 代码: #include<bits/stdc++.h> using namespace std; #define lson t[x].ch[0] #define 阅读全文
posted @ 2021-03-31 15:51 Troverld 阅读(62) 评论(0) 推荐(0)
摘要:LCT。 I.LCT可以干什么? 动态树问题, 是近几年在OI中兴起的一种新型问题, 是一类要求维护一个有根树森林, 支持对树的分割,合并等操作的问题。 由Robert E Tarjan为首的科学家们 提出解决算法Link-Cut Tree,简称LCT。 ——《百度百科》 算了,看看就行。 我们唯一 阅读全文
posted @ 2021-03-31 15:49 Troverld 阅读(98) 评论(0) 推荐(0)
摘要:CLI.[ARC115E]LEQ and NEQ 设 \(f_{i,j}\) 表示位置 \(i\) 填 \(j\) 的方案数。则 \(f_{i,j}=\Big(\sum\limits_{k}f_{i-1,k}\Big)-f_{i-1,k}\)。于是我们便考虑线段树优化,只需要实现四种操作:整体求和, 阅读全文
posted @ 2021-03-31 15:36 Troverld 阅读(162) 评论(0) 推荐(0)
摘要:CXLIV.[IOI2018] meetings 会议 被人坑了说这题是CDQ分治的题,一小时想不出来开了题解发现是道DP 大概不会有人像我一样一开始想了极其诡异的DP,然后发现可以用莫队+树剖优化到 \(O(n\sqrt{n}\log^2n)\),但是这复杂度估计比 \(n^2\) 还差…… 扯远 阅读全文
posted @ 2021-03-31 15:24 Troverld 阅读(75) 评论(0) 推荐(0)
摘要:CXXX.[GYM102904B]Dispatch Money 考虑设 \(f_i\) 表示长度为 \(i\) 的前缀的最优划分。则我们发现,有 \(f_j+\operatorname{inversion}(j+1,i)\rightarrow f_i\),其中 \(\text{inversion}\ 阅读全文
posted @ 2021-03-31 14:59 Troverld 阅读(274) 评论(0) 推荐(0)
摘要:CXXIV.[GYM102155J]stairways 首先,考虑暴力 \(n^3\) DP——设 \(f_{i,j,k}\) 表示当前DP到第 \(i\) 个人,且第一条楼梯上到的最晚的人在时刻 \(j\) 到达,第二条楼梯在时刻 \(k\)。 然后,观察到 \(j,k\) 中至少有一个值为前缀 阅读全文
posted @ 2021-03-31 14:49 Troverld 阅读(148) 评论(0) 推荐(1)
摘要:LXXVIII.[USACO12OPEN]Bookshelf G 转移很简单,直接设$f[i]$表示前$i$个位置书架的最小高度和即可。 考虑转移。 我们有暴力的公式 \(f[i]=\min\limits_{j=1}^{i}\Big\{f_{j-1}+\max\{h_j,\dots,h_i\}\Bi 阅读全文
posted @ 2021-03-30 19:36 Troverld 阅读(80) 评论(0) 推荐(0)
摘要:LXXII.[HEOI2016/TJOI2016]序列 说实话我对于这道题应该归到DP还是树套树时曾经纠结了很久 我们回忆一下正牌的LIS: 对于$\forall j<i\ \land\ a_j\leq a_i$,$f[i]$可以从$f[j]$转移过来。 现在,我们设$mx_i,mn_i$分别表示位 阅读全文
posted @ 2021-03-30 16:54 Troverld 阅读(59) 评论(0) 推荐(0)
摘要:LVII.CF809D Hitchhiking in the Baltic States 设$f_i$表示长度为$i$的LIS结尾的最小值。为了方便,设$g_i$表示前一个物品的$f_i$(即滚动数组); 则对于一个$[l,r]$的物品: 对于$g_<l$的位置,有$f_i=\max(g_i,l)$ 阅读全文
posted @ 2021-03-30 16:28 Troverld 阅读(46) 评论(0) 推荐(0)
摘要:LI.CF115E Linear Kingdom Races 思路1. 设$f[i][j]$表示: 当前DP到第$i$位,且最右边的一个没有修的路是第$j$条路,的最大收益。 则有 \(f[i][i]=\max\limits_{j=0}^{i-1}f[i-1][j]\) 这是在$i$号路不修的情况。 阅读全文
posted @ 2021-03-30 16:21 Troverld 阅读(94) 评论(0) 推荐(0)