摘要: VIII.[SDOI2008]Sandy的卡片 ……有什么意义吗…… 差个分,然后就是IV.[POI2000]公共串的内容了,套个单调队列,$O(n)$解决,假如你用DC3的话。 代码: #include<bits/stdc++.h> using namespace std; int all,n,m 阅读全文
posted @ 2021-03-31 16:58 Troverld 阅读(56) 评论(0) 推荐(0)
摘要: VII.[HAOI2016]找相同字符 第一道自己做出的SA题祭~~~ 实际上和上一题没啥区别的说…… 我们发现,这题实际上就是对于两个串中所有的后缀求$\operatorname\(之和(因为这两个后缀共有\)\operatorname$个前缀是相同的,即串中有这么多子串是相同的)。 老套路,俩串 阅读全文
posted @ 2021-03-31 16:57 Troverld 阅读(74) 评论(0) 推荐(0)
摘要: VI.[AHOI2013]差异 \(\sum\limits_{1\leq i<j\leq n}\text{len}(T_i)+\text{len}(T_j)-2\times\text{LCP}(T_i,T_j)\) 这个柿子可以拆成两部分,即 \(\sum\limits_{1\leq i<j\leq 阅读全文
posted @ 2021-03-31 16:55 Troverld 阅读(52) 评论(0) 推荐(0)
摘要: V.UVA11107 Life Forms 这题同上题类似,只不过把“在全部串中出现”变成了“在超过一半(即$\left\lfloor\dfrac{2}\right\rfloor+1$)个串中出现”。 这题中我的方法是上题中提到的“two-pointers+单调队列”算法。第一遍跑求出所有满足“出现 阅读全文
posted @ 2021-03-31 16:54 Troverld 阅读(66) 评论(0) 推荐(0)
摘要: IV.[POI2000]公共串 后缀数组如何应对多个串的情况呢? 答案很简单:把所有串都拼起来! 但这又有个问题,拼起来的串不会出现一些错误吗? 没关系,这里就有解决方案了:在相邻的串间插入一个从未出现过的字符。 我们考虑在拼起来的字符串中求出$ht$数组。则仍然考虑二分公共子串长度$ip$,在$h 阅读全文
posted @ 2021-03-31 16:52 Troverld 阅读(82) 评论(0) 推荐(0)
摘要: III.[USACO06DEC]Milk Patterns G 同上一题思路类似,我们仍然建出后缀数组。 考虑任何出现$k$次的子串,以它们作为前缀的后缀在$sa$数组中一定是连续的——这一点可以从上文中的$\text$直接看出,因为相邻的结果一定大于等于不相邻的结果。 因此我们只需要求出$ht$数 阅读全文
posted @ 2021-03-31 16:49 Troverld 阅读(68) 评论(0) 推荐(0)
摘要: II.[USACO5.1]乐曲主题Musical Themes 一个显然的思路就是差分,这样子在原数组中差相等,就转为差分数组中子串相同。 我们考虑建出后缀数组。 显然,这个答案可以二分,则我们二分一个长度$ip$。 考虑$ht$数组。我们在所有$ht_i<ip$的地方切一刀,将$ht$数组切成多段 阅读全文
posted @ 2021-03-31 16:48 Troverld 阅读(90) 评论(0) 推荐(0)
摘要: I.不同子串个数 后缀数组在处理子串问题时往往有奇效,因为后缀的前缀即是子串,而后缀数组正是按照前缀排序的后缀。 回到本题。因为后缀的前缀是子串,则一条后缀与其它所有后缀的LCP的最长长度,即是这条后缀的前缀子串中所有被重复计数的串的数量。 我们掏出求得的$ht$数组。初学SA时大家一定接触过一个重 阅读全文
posted @ 2021-03-31 16:47 Troverld 阅读(288) 评论(0) 推荐(0)
摘要: Prufer序列是一种神奇的东西,其可以实现无根树与序列间的双射,并且在计数题、DP题、找规律题等等问题中有着不俗的表现。 (另,大部分时候,Prufer及其误拼Purfer、Purfur、Prefer等奇奇怪怪的变体是被混用了的) 首先,一棵 \(n\) 个节点的树的Prufer序列,是一长度为 阅读全文
posted @ 2021-03-31 16:46 Troverld 阅读(229) 评论(0) 推荐(0)
摘要: 这里是矩阵树定理学习笔记。线性代数基础详见线性代数学习笔记。 矩阵树定理是用来作生成树计数的好东西。其定理主要表述如下: 设 \(\mathbb{G}\) 为一无向图。则其无向无根生成树的数量,可以被如下算法求得: 设矩阵 \(S_1\),其中第 \(i\) 行第 \(j\) 列的数是 \((i,j 阅读全文
posted @ 2021-03-31 16:44 Troverld 阅读(225) 评论(0) 推荐(0)
摘要: XXVI.[AH2017/HNOI2017]单旋 先从单旋最小/大值的操作看起。手动模拟一下的话就会发现它对整棵树的形态几乎没有影响,就是断开最小值与它父亲的连边,并用其原本的右儿子(如果存在)替代。之后,将整棵树的根设作其新右儿子。最大值同理。 然后删除最小值也类似。注意删除一个原本就在树顶的最小 阅读全文
posted @ 2021-03-31 16:42 Troverld 阅读(106) 评论(0) 推荐(0)
摘要: XXV.Sasha and Algorithm of Silence's Sounds 假设我们把区间$[l,r]\(里的格子连出来,然后发现出现一个环,则我们可以肯定地说,所有具有\)[l,r]$作为子区间的区间,都是不合法的。 于是我们对于每个位置$l$,都可以找出其最右边的不成环的位置$r$。 阅读全文
posted @ 2021-03-31 16:37 Troverld 阅读(65) 评论(0) 推荐(0)
摘要: XXIV.CF482E ELCA Difficulty 3200的大神题。 这题维护应该很好想:与其维护所有对的LCA,不如维护一个数是多少对的LCA。显然,这个数量应该为$sz_x2-\sum\limits_{y\in son_x}sz_y2$。其中$sz_x$为$x$子树的大小,$son_x$为 阅读全文
posted @ 2021-03-31 16:35 Troverld 阅读(70) 评论(0) 推荐(0)
摘要: XXIII.CF603E Pastoral Oddities 结论1:只有点数为偶的连通块,才有可能使每个点的度数为奇。(偶连通块的必要性) 证明1:如果在奇连通块中,每个点的度数为奇,则总度数为奇,但是总度数必定是偶数(每条边增加两点度数),因此不可能存在奇的合法连通块。 结论2:任何点数为偶的连 阅读全文
posted @ 2021-03-31 16:34 Troverld 阅读(70) 评论(0) 推荐(0)
摘要: XXII.SP16580 QTREE7 - Query on a tree VII 它来了,它来了!LCT树套树的经典题,它来了! 虽然只是LCT套 std::multiset 而已 这题具体过程同QTREE6,不再赘述。唯一有区别的是,这题需要维护的是虚子树中最大值,不具有可减性。 因此,我们采用 阅读全文
posted @ 2021-03-31 16:32 Troverld 阅读(47) 评论(0) 推荐(0)
摘要: XXI.[ZJOI2016]大森林 论LCT的百种用法系列 这题有几个性质: 1.询问与时间无关。因为只是添加新点,原来点之间的位置关系不变。因此只要询问的两个点都被建出来了,何时进行询问并无影响。 2.操作重叠的部分很多。因为我们不管怎么加点,即使是加原树中没有的点,仍然有原来点之间的位置关系不变 阅读全文
posted @ 2021-03-31 16:30 Troverld 阅读(74) 评论(0) 推荐(0)
摘要: XX.SP16549 QTREE6 - Query on a tree VI 本题LCT全方面爆破树剖——无论是复杂度、码量、思维难度、代码难度,全都碾压树剖。并且,LCT容易模板化,但是树剖不容易——树剖搭配的线段树因题而异,而LCT只需要把$pushup$和$pushdown$稍微改改就可以直接 阅读全文
posted @ 2021-03-31 16:27 Troverld 阅读(86) 评论(0) 推荐(0)
摘要: XIX.首都 一句话题意:维护一棵森林,支持查询某棵树的重心以及所有树的重心的异或和。 众所周知,重心有如下性质:将两棵树之间连一条边后,新树的重心在原两棵树重心的连线上。 根据这一性质,我想了半天也没有想出来什么美妙的算法主要还是我splay没学好 首先,这道题正解有两个,一是LCT+启发式合并( 阅读全文
posted @ 2021-03-31 16:24 Troverld 阅读(72) 评论(0) 推荐(0)
摘要: XVIII.最小差值生成树 这题$m^2$暴力求最小生成树应该是过不去的……估计只有LCT能过去了。 然后就是同IV.[NOI2014]魔法森林一致的方法,排序之后暴力断边连边即可。 注意会有自环!!!虽然我也不知道为什么没判自环算我MLE…… 代码: #include<bits/stdc++.h> 阅读全文
posted @ 2021-03-31 16:23 Troverld 阅读(82) 评论(0) 推荐(0)
摘要: XVII.[SDOI2017]树点涂色 树剖和LCT学到最后实际上是殊途同归的……就比如说这题,可以用树剖,但是在操作$1$中借鉴了LCT的跳链思想;LCT则因为不能子树修改,按照dfs序需要建出线段树出来,实际上也就是树剖的思想了。 首先讲一下LCT写法。观察到任意时刻,任意一种颜色一定是一条深度 阅读全文
posted @ 2021-03-31 16:21 Troverld 阅读(83) 评论(0) 推荐(0)
摘要: XVI.二分图 /【模板】线段树分治 本题有两种做法。一是所谓的“正解”线段树分治,复杂度$O(n\log n\log k)$。思路比较简单,敲起来也简单,就是复杂度不太优秀。 代码: #include<bits/stdc++.h> using namespace std; #define lson 阅读全文
posted @ 2021-03-31 16:19 Troverld 阅读(91) 评论(0) 推荐(0)
摘要: XV.[USACO18FEB]New Barns P 这种东西应该怎么维护呢?这是子树最大值呀。 一种方法是用平衡树(例如 std::multiset )维护轻儿子长度集合。但是这种东西太麻烦,太恶心了。 考虑直径的性质。我们给出两条引理: 引理1:假如有一条直径$(p,q)$,那么树中任意一个点$ 阅读全文
posted @ 2021-03-31 16:17 Troverld 阅读(354) 评论(0) 推荐(0)
摘要: XIV.[BZOJ3159]决战 你们知道吗!把一行 #define int long long 写在了一行 int 的后面然后 debug 了一整天的崩溃你知道吗!!! 我恨不得罢免了自己! 言归正传。 从某种角度来说,这是我写的第一棵树套树!虽然是邪教般的LCT套splay 首先,除了翻转操作以 阅读全文
posted @ 2021-03-31 16:15 Troverld 阅读(83) 评论(0) 推荐(0)
摘要: XIII.[TJOI2015]旅游 我至今还记得做毒瘤树剖题和毒瘤线段树题时那一坨坨触目惊心的 pushup 和 pushdown …… 这题是可以用树剖做的。但是,我还是选择了LCT。 在每个节点,我们维护如下值: mx :子树最大值 mn :子树最小值 lmx :从左往右走,最大收益(即要求的东 阅读全文
posted @ 2021-03-31 16:13 Troverld 阅读(66) 评论(0) 推荐(0)
摘要: 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 阅读(91) 评论(0) 推荐(0)
摘要: X.[WC2006]水管局长 或许我这题应该放到V.[NOI2014]魔法森林前面的QaQ? 这题首先一眼看出翻转加边顺序。然后,动态维护最小生成森林,这样保证最小生成森林上的路径上的最大值就是原图中路径的最大值的可能的最小值。反正随便写写就行了。 代码: #include<bits/stdc++. 阅读全文
posted @ 2021-03-31 16:06 Troverld 阅读(50) 评论(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 阅读(64) 评论(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 阅读(65) 评论(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 阅读(61) 评论(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 阅读(63) 评论(0) 推荐(0)
摘要: LCT。 I.LCT可以干什么? 动态树问题, 是近几年在OI中兴起的一种新型问题, 是一类要求维护一个有根树森林, 支持对树的分割,合并等操作的问题。 由Robert E Tarjan为首的科学家们 提出解决算法Link-Cut Tree,简称LCT。 ——《百度百科》 算了,看看就行。 我们唯一 阅读全文
posted @ 2021-03-31 15:49 Troverld 阅读(98) 评论(0) 推荐(0)
摘要: 这里是Kruskal重构树学习笔记。 Kruskal重构树,是用于求出有关一张图中,某点仅经过边权 \(\leq\) 某个值 \(v\) 的边所得到的子图的有关信息的工具。 但事实上,其应用还有更多。 我们先讲述其构造方法: 将所有边按照边权递增排序。 依次枚举每一条边。假如此时边的两个端点处于两个 阅读全文
posted @ 2021-03-31 15:47 Troverld 阅读(249) 评论(0) 推荐(0)
摘要: 这里是集合幂级数学习笔记。 本博客在半年前就已经有计划去写了,只不过当时题目较少没能如愿。现在攒了几道题,开始动笔。 O.定义 定义 \mathsf 字体的函数为集合幂级数。例:\(\mathsf F(x),\mathsf G(x)\)。 定义 \mathbb 字体的变量表示集合。例:\(\math 阅读全文
posted @ 2021-03-31 15:45 Troverld 阅读(3691) 评论(4) 推荐(15)
摘要: CLVII.[LOJ#2372]「CEOI2002」臭虫集成电路公司 考虑轮廓线DP。因为有 \(3\times2\) 的矩形存在,所以要压两行。又因为两行的状态只有可能是 00,01,10 之一,所以压三进制。又因为卡空间,所以要滚动数组。时间复杂度 \(O(nm3^m)\)。 代码: #incl 阅读全文
posted @ 2021-03-31 15:44 Troverld 阅读(66) 评论(0) 推荐(0)
摘要: CLVI.CF868E Policeman and a Tree DP是很容易想的。但是如何设计状态呢? 一开始我自己假设了一个结论:在警察出发前,所有罪犯会排成此时的最优方案,然后不动;然后在警察抓到一个罪犯后,所有罪犯会再度排成最优方案,之后就一直不动了。但是如果这样做的话 \(50\) 的数据 阅读全文
posted @ 2021-03-31 15:42 Troverld 阅读(65) 评论(0) 推荐(0)
摘要: CLV.[AGC046D]Secret Passage 稍微观察一下就能发现,任一时刻,我们剩下的东西必然是一段定死了的后缀,加上一些可以任意塞位置的 \(0\) 与 \(1\)。考虑任意一个由上述时刻生成的串,就会发现它与该后缀的最长公共子序列长度即为后缀长度,且还剩余一些 \(0\) 与 \(1 阅读全文
posted @ 2021-03-31 15:40 Troverld 阅读(149) 评论(0) 推荐(1)
摘要: CLIV.[CODE FESTIVAL 2017 qual C]Three Gluttons 题解 阅读全文
posted @ 2021-03-31 15:39 Troverld 阅读(51) 评论(0) 推荐(0)
摘要: CLIII.[SDOI2017]切树游戏 设 \(f_{x,0,i}\) 表示 \(x\) 子树中,所有包含 \(x\) 且异或和为 \(i\) 的连通块数量,\(f_{x,1,i}\) 表示 \(x\) 子树中异或和为 \(i\) 的连通块数量。显然,有公式 \(f_{x,1,i}=f_{x,0, 阅读全文
posted @ 2021-03-31 15:38 Troverld 阅读(90) 评论(0) 推荐(0)
摘要: CLII.【模板】"动态 DP"&动态树分治 裸的树上最大独立集怎么做?设 \(f_{x,0}\) 表示在 \(x\) 子树中, \(x\) 不选的最大答案;\(f_{x,1}\) 表示在 \(x\) 子树中,\(x\) 选的最大答案。则有 \(f_{x,0}=\sum\limits_{y\in\t 阅读全文
posted @ 2021-03-31 15:37 Troverld 阅读(64) 评论(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)
摘要: CL.[NOI2018] 冒泡排序 结论1.交换次数压到下界,当且仅当不存在长度大于 \(2\) 的下降子序列。 证明很简单。众所周知的是,冒泡排序的交换次数等于序列逆序对数。要压到下界,与每个点有关的逆序对数都只能为 \(|i-p_i|\),因为从 \(i\) 到 \(p_i\) 的过程中本身就要 阅读全文
posted @ 2021-03-31 15:34 Troverld 阅读(154) 评论(0) 推荐(0)
摘要: CIL.[NOI2020] 制作菜品 本题有三个难点:留意到题面中的 \(n-2\leq m\);证明;想到 bitset 优化。 首先,在很隐蔽的角落,有一句话 \(n-2\leq m\leq 5000\)。假如没看到这句话,就乖乖爆零罢。 结论1. \(m\geq n-1\) 时一定有解。 要证 阅读全文
posted @ 2021-03-31 15:32 Troverld 阅读(85) 评论(0) 推荐(0)
摘要: CXLVIII.[NOI2019] 机器人 首先发现每个点向左向右能到达的位置就类似笛卡尔树上一个点的代表区间,不同的是这里有多个最大值时选取最右的一个。于是我们可以想到一个DP,\(f_{[i,j],k}\) 表示区间 \([i,j]\) 的最大值恰为 \(k\) 或不大于 \(k\),两种设的方 阅读全文
posted @ 2021-03-31 15:31 Troverld 阅读(127) 评论(0) 推荐(0)
摘要: CXLVII.[NOI2016] 国王饮水记 首先,我们一定可以舍去那些高度比 \(h_1\) 还小的城市,并且将剩余的高度比 \(h_1\) 大的城市排序,使得 \(h_1\) 到 \(h_n\) 递增。 我们不妨从三座城市想起。假如可以合并两次,应该怎么合并? 先合并 \((1,2)\),再合并 阅读全文
posted @ 2021-03-31 15:29 Troverld 阅读(112) 评论(0) 推荐(1)
摘要: CXLVI.[十二省联考 2019]皮配 题解里”豌豆“的比喻实在太精妙了。 先重新描述一遍题意:有 \(n\) 个豆子,每个豆子有其重量,并位于某个豆荚内。每粒豆子颜色可以为黄色/绿色,表皮可以为皱皮/圆皮。每个豆荚里所有豆子的颜色必须相同。对于所有黄色/绿色/皱皮/圆皮的豆子,其重量和有一上界。 阅读全文
posted @ 2021-03-31 15:28 Troverld 阅读(254) 评论(0) 推荐(0)
摘要: CXLV.[九省联考2018]秘密袭击coat 首先先讲一种暴力但能过的方法。 很容易就会往每个值各被计算几次的方向去想。于是我们枚举每个节点,计算有多少种可能下该节点是目标节点。 为了避免相同的值的影响,我们在值相同的点间也决出一种顺序,即,若两个值相同的点在作比较,依照上文定下的那种顺序决定。 阅读全文
posted @ 2021-03-31 15:27 Troverld 阅读(51) 评论(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)
摘要: CXLIII.[AGC013E] Placing Squares 关键是将问题从抽象的“正方形面积”转为具象的形式:一段长度为 \(d\) 的区间,有两个不同的小球要放进去,则总放置方案就是 \(d^2\),且不同的区间间方案是通过乘法原理结合的,刚好是题目中 \(\prod d^2\) 的形式。 阅读全文
posted @ 2021-03-31 15:23 Troverld 阅读(62) 评论(0) 推荐(0)
摘要: CXLII.CF1158F Density of subarrays 题解 阅读全文
posted @ 2021-03-31 15:22 Troverld 阅读(57) 评论(0) 推荐(0)
摘要: CXLI.[八省联考2018]林克卡特树 一眼发现函数是凸的。然后思考发现直接一个树形DP就能进行二分的check:设 \(f_{i,0/1/2}\) 分别表示节点 \(i\),其中 \(i\) 未被选/是一条链的链顶/被一条链经过,然后直接DP就行。 为什么二分边界要开到 \(10^{12}\) 阅读全文
posted @ 2021-03-31 15:19 Troverld 阅读(69) 评论(0) 推荐(0)
摘要: CXL.忘情 wqs二分水题,明显那个式子可以被化成 \((1+\sum x)^2\),于是可以斜率优化,然后又明显随着段数越分越多函数是凹的,于是可以简单wqs二分。时间复杂度 \(O(n\log n)\)。 需要注意的是,因为二分上界是 \(10^{18}\),所以得开 __int128。 代码 阅读全文
posted @ 2021-03-31 15:17 Troverld 阅读(88) 评论(0) 推荐(0)
摘要: CXXXIX.[AGC030F] Permutation and Minimum 看到 \(300\) 的数据范围,再加上计数题,很容易就往计数DP方向去想。 为方便,我们将 \(n\) 乘二。 因为是两个位置取 \(\min\),于是我们便想到从小往大把每个数填入序列。于是DP数组第一维的意义便出 阅读全文
posted @ 2021-03-31 15:16 Troverld 阅读(66) 评论(0) 推荐(0)
摘要: CXXXVIII.CF739E Gosha is hunting 因为 \(n\) 是 \(2000\),我们可以想出设一个二维状态来保证 \(n,a\) 这两维,然后再wqs二分 \(b\) 这一维。(明显,随着 \(b\) 越来越大,呈现一凸函数)。 时间复杂度 \(O(n^2\log n)\) 阅读全文
posted @ 2021-03-31 15:14 Troverld 阅读(73) 评论(0) 推荐(0)
摘要: CXXXVII.[国家集训队]Tree I 两年前刚学MST时做这题WA了,然后两年后才把它补上…… 明显直接wqs二分就行了。 代码: #include<bits/stdc++.h> using namespace std; int n,m,q,dsu[50100],ip; int read(){ 阅读全文
posted @ 2021-03-31 15:13 Troverld 阅读(63) 评论(0) 推荐(0)
摘要: CXXXVI.[IOI2000] 邮局 加强版 Observation 1. 若一段村庄中设一个邮局,则邮局一定设在其中位数(若是偶数则任一中位数)的位置。 Observation 2. 若令 \(w(l,r)\) 为区间 \((l,r)\) 中村庄设一个邮局的费用,则其满足四边形不等式。 Obse 阅读全文
posted @ 2021-03-31 15:11 Troverld 阅读(184) 评论(0) 推荐(0)
摘要: CXXXV.[ZOJ3989]Triangulation 神题。 这个数据范围很难不让人想到状压DP。于是我们考虑应该怎么设计状态。 考虑一组三角剖分的形态:其必定是在所有点所构成的凸包内部划分出很多三角形。这也就表明,任何一组三角剖分一定包含所有凸包上的边。 我们可以想到一个比较简洁的DP:设 \ 阅读全文
posted @ 2021-03-31 15:08 Troverld 阅读(98) 评论(0) 推荐(0)
摘要: CXXXIV.[BZOJ3864]Hero meet devil 我们不妨从最trival的LCS问题上想起:暴力的LCS求法是什么? 设 \(f(i,j)\) 表示一个串(不妨设为本题中要填的字符串 \(T\))的前 \(i\) 位与另一个串(即题目中给出的 \(S\))的前 \(j\) 位所构成 阅读全文
posted @ 2021-03-31 15:06 Troverld 阅读(59) 评论(0) 推荐(0)
摘要: CXXXIII.[HDU6094]Rikka with K-Match 依旧wqs二分。 首先,依据我们之前提到过的一个性质,“凡是可以表示成费用流模型的东西都有凹凸性”,本题也不例外,关于匹配个数的函数是凹的。 凹的就可以wqs二分。于是问题转换为最小权任意匹配。因为 \(m\) 只有 \(4\) 阅读全文
posted @ 2021-03-31 15:04 Troverld 阅读(145) 评论(0) 推荐(0)
摘要: CXXXII.[GYM102268J]Jealous Split wqs二分。 首先,先讲一下wqs二分的应用条件: 对于某个函数 \(f(x)\) 和一个特定的 \(x\),要求出 \(f(x)\) 的值的复杂度是不可接受的;但是,若满足 \(f\) 是上凸/下凹的,且对于一个给定的 \(k\), 阅读全文
posted @ 2021-03-31 15:03 Troverld 阅读(246) 评论(0) 推荐(1)
摘要: CXXXI.[GYM102331J]Jiry Matchings 首先,不难想到一个 \(O(n^2)\) 的树上背包:设 \(f_{i,0/1,j}\) 表示在以 \(i\) 为根的子树内,其中 \(i\) 没有被匹配/被匹配了,且整个子树中共匹配了 \(j\) 条边的最优方案。考虑优化。 我们知 阅读全文
posted @ 2021-03-31 15:02 Troverld 阅读(557) 评论(1) 推荐(1)
摘要: 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)
摘要: CXXIX.CF559E Gerald and Path 考虑将所有线段按照固定的那一端从小往大排序,并且对线段的端点离散化。 这之后,设 \(f_{i,j}\) 表示当前处理到线段 \(i\),且所有线段中最右的那根的右端点不右于位置 \(j\)(即可以在 \(j\) 左面或与 \(j\) 重合) 阅读全文
posted @ 2021-03-31 14:58 Troverld 阅读(67) 评论(0) 推荐(0)
摘要: CXXVIII.[AGC020E] Encoding Subsets 这种“压缩”题可以考虑区间DP。但是若考虑标准的区间的话它“子集”等定义又不好处理。 于是我们考虑对字符串作DP。设 \(f(S)\) 表示一个串 \(S\) 及其所有子集的压缩方案数。 显然,其有两种转移方式:一种是 \(S_0 阅读全文
posted @ 2021-03-31 14:56 Troverld 阅读(76) 评论(0) 推荐(0)
摘要: CXXVII.[GYM102822I]Invaluable Assets 引理1.最优解法下我们会尽量选取效果为 \(\sqrt{c}\) 的肥料。 考虑每袋肥料单位效果所需费用——此为 \(\dfrac{x^2+c}{x}\)。将分数拆开并套上均值,得到最大值在 \(\sqrt{c}\) 处取到。 阅读全文
posted @ 2021-03-31 14:55 Troverld 阅读(319) 评论(0) 推荐(0)
摘要: CXXVI.[GYM102832J]Abstract Painting 考虑将一个圆心为 \((x,0)\),半径为 \(R\) 的圆,转换为 \(x\) 轴上线段 \([x-R,x+R]\),问题转换为求无交的线段覆盖方案数。 因为所有的圆半径很小(\(5\)),所以我们考虑状压位置 \(i\) 阅读全文
posted @ 2021-03-31 14:53 Troverld 阅读(98) 评论(0) 推荐(0)
摘要: CXXV.[Topcoder16346]TwoPerLine 跟一年半以前就刷过的经典老题[AHOI2009]中国象棋完全一致,道理非常simple,设 \(f_{i,j,k}\) 表示DP到第 \(i\) 列,其中有 \(j\) 行内恰有 \(2\) 枚棋,\(k\) 行里恰有 \(1\) 枚棋, 阅读全文
posted @ 2021-03-31 14:51 Troverld 阅读(49) 评论(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 阅读(150) 评论(0) 推荐(1)
摘要: CXXIII.CF612F Simba on the Circle 题解 阅读全文
posted @ 2021-03-31 14:45 Troverld 阅读(28) 评论(0) 推荐(0)
摘要: CXXII.CF913E Logical Expression 题解 阅读全文
posted @ 2021-03-31 14:43 Troverld 阅读(34) 评论(0) 推荐(0)
摘要: CXXI.[GYM100134I][NEERC2012]Identification of Protein debug5h,精神崩溃。 首先,很容易想到把所有东西都乘上 \(10^5\) 变成整数。然后,因为 \(\gcd(9705276,12805858)=2\),所以在字符串长度 \(\leq4 阅读全文
posted @ 2021-03-31 14:41 Troverld 阅读(94) 评论(0) 推荐(0)
摘要: CXX.CF917D Stranger Trees 这里是本题的DP解法。矩阵树定理解法详见矩阵树定理学习笔记中重题III.TopCoder13369-TreeDistance。 首先,一个基础结论是,如果一张 \(n\) 个点的图,被连成一棵森林,则继续加边连成一棵树的方案数是 \(n^{k-2} 阅读全文
posted @ 2021-03-31 14:39 Troverld 阅读(62) 评论(0) 推荐(0)
摘要: CXIX.[SHOI2009]舞会 之前一直在往二项式反演去想,没想到最后居然成了…… 我们考虑将男生和女生全部按照高度递减排序,则对于第$i$个男生,能与他构成特殊对的女生必定是一个前缀,设前缀长度为$num_i$。显然,$num_i$是单调不降的。 然后,我们考虑设$f_i$表示钦定$i$对匹配 阅读全文
posted @ 2021-03-31 14:38 Troverld 阅读(51) 评论(0) 推荐(0)
摘要: CXVIII.[BJOI2017]机动训练 这题的瓶颈,在于把 \(a_i^2\) 看作 \(\sum\limits_{i=1}^{a_i}\sum\limits_{j=1}^{a_i}1\),然后我们就可以看成“两两相同的机动路径都能贡献$1$”。于是我们设$f_{x1,y1,x2,y2}\(表示 阅读全文
posted @ 2021-03-31 14:36 Troverld 阅读(102) 评论(0) 推荐(0)
摘要: CXVII.[清华集训2012]串珠子 如果直接暴力上状压进行计数是会重复计算的;那么怎样不重不漏地计数呢? 我们发现,要求出连通图的数量是比较难的;但是要求出非联通图的数量是比较简单的,因为我们可以祭出套路。 我们设 \(f_i\) 表示 \(i\) 集合中所有图的数量(不管联通与否)。再设 \( 阅读全文
posted @ 2021-03-31 14:35 Troverld 阅读(55) 评论(0) 推荐(0)
摘要: CXVI.[COCI2014-2015#1] Kamp 一看题面,突然感觉很弱智,不就是求出以每个点为根到其它所有特殊点的距离之和吗?这不是随随便便换个根就完事了吗? 然后兴冲冲敲出来,一测样例全挂。 后来发现并不是这样的,因为车上可以同时搭载多人,且车最后可以就停在某个地方不回去了。 稍微想想可以 阅读全文
posted @ 2021-03-31 14:33 Troverld 阅读(117) 评论(0) 推荐(0)
摘要: CXV.[COCI2019]Mobitel 如果正着来DP的话,状态是 \(O(rsn)\) 的,不可能通过。 这时,我们就要应用一些数论知识了: 若 \(\prod a_i<n\), 则 \(\left\lfloor\dfrac{n-1}{\prod a_i}\right\rfloor\geq 1 阅读全文
posted @ 2021-03-31 14:32 Troverld 阅读(100) 评论(0) 推荐(0)
摘要: CXIV.[POI2014]ZAL-Freight 题解 阅读全文
posted @ 2021-03-31 14:31 Troverld 阅读(44) 评论(0) 推荐(0)
摘要: CXIII.[JLOI2016/SHOI2016]侦察守卫 神题。 见代码即可。 #include<bits/stdc++.h> using namespace std; int n,m,p,a[500100],f[500100][25],g[500100][25],res=0x3f3f3f3f; 阅读全文
posted @ 2021-03-31 14:29 Troverld 阅读(77) 评论(0) 推荐(0)
摘要: CXII.[CEOI2007]树的匹配Treasury 题解 阅读全文
posted @ 2021-03-31 14:27 Troverld 阅读(36) 评论(0) 推荐(0)
摘要: CXI.[九省联考2018]一双木棋chess 一下子就想到了LXX.[USACO5.5]贰五语言Two Five(可见刷题笔记II),因为同是阶梯型的图样。然后稍微想一想就发现总方案数可以用隔板法证得是$\dbinom{n+m}$的,代入一看发现才$2\times10^5$都不到。于是就果断DP了 阅读全文
posted @ 2021-03-31 14:25 Troverld 阅读(67) 评论(0) 推荐(0)
摘要: CX.[POI2015]MOD 比较恶心的题目。 首先,有一个结论,即如果把两棵树通过某种方式连接起来,新树的直径的端点一定来自于原本两棵树的直径端点集合。 则考虑新树的最大直径,明显就是把两棵树的直径直接连一块,就是两棵树的直径之和再加一。 考虑新树的最小直径,则应该选择两树直径的中点(如果直径长 阅读全文
posted @ 2021-03-31 14:23 Troverld 阅读(57) 评论(0) 推荐(0)
摘要: CIX.[NOI Online #1 入门组]魔法 我们可以构造出原图的转移矩阵 \(A\),表示只走原图的边的代价。这个直接暴力上Floyd即可。 我们还可以构造出魔法的转移矩阵$B$。 则,可以想到,答案一定是 \(ABABABABAB\dots ABA\) 这种样子。 故我们用$B$左乘$A$ 阅读全文
posted @ 2021-03-31 14:21 Troverld 阅读(62) 评论(0) 推荐(0)
摘要: CVIII.[POI2014]MRO-Ant colony 根据下取整除法的性质(\(\left\lfloor\dfrac{\left\lfloor\dfrac{x}{y}\right\rfloor}{z}\right\rfloor=\left\lfloor\dfrac{x}{yz}\right\r 阅读全文
posted @ 2021-03-31 14:20 Troverld 阅读(54) 评论(0) 推荐(0)
摘要: CVII.[NOI2009]二叉查找树 首先该树的中序遍历是唯一可以确定的(直接按照数据值排序即可)。 然后,因为权值可以被修改成一切实数,故我们完全可以把权值离散化掉。 于是我们现在可以设置一个DP状态$f[l,r,lim]$表示: 区间$[l,r]$中的所有东西构成了一棵子树,且树中最小权值不小 阅读全文
posted @ 2021-03-31 14:18 Troverld 阅读(76) 评论(0) 推荐(0)
摘要: CVI.[CSACADEMY]Root Change 常规换根DP。设 \(f_i\) 表示 \(i\) 子树中以 \(i\) 为起点的最长路径长度,设 \(sz_i\) 表示 \(i\) 子树中边的数量,再设 \(g_i\) 表示 \(i\) 子树的答案。 则 \(f\) 和 \(sz\) 显然很 阅读全文
posted @ 2021-03-31 14:16 Troverld 阅读(52) 评论(0) 推荐(0)
摘要: CV.[ARC067D] Yakiniku Restaurants 明显在最优方案中,行走方式一定是从一条线段的一端走到另一端,不回头。 于是设 \(f[i,j]\) 表示从 \(i\) 走到 \(j\) 的最优代价。明显,该代价对于不同的券相互独立。故我们依次考虑每一张券。 我们发现,假设有一张位 阅读全文
posted @ 2021-03-31 14:15 Troverld 阅读(46) 评论(0) 推荐(0)
摘要: CIV.[TopCoder 12519]ScotlandYard 我们考虑一个最原始的DP状态:$f[\mathbb]\(表示根据当前给出的信息,猜的人可以推测出当前藏的人一定在且仅在集合\)\mathbb$之中时,藏的人最多可以走多少步。 然后考虑枚举藏的人下一步给出走了什么颜色的边,然后取$\m 阅读全文
posted @ 2021-03-31 14:13 Troverld 阅读(94) 评论(0) 推荐(0)
摘要: CIII.[APIO2014]连珠线 一般的换根DP题。 明显可以看出,最终的树一定可以通过指定一个根变成一棵有根树,所有的蓝边都可以被分成两两一组,其中每组中两条边深度递增。 于是我们可以设置DP状态。$f_{x,0/1}$表示节点$x$,它不是/是某对蓝边的中间节点时,子树中最大的蓝边权和。 简 阅读全文
posted @ 2021-03-31 14:11 Troverld 阅读(71) 评论(0) 推荐(0)
摘要: CII.HDU6212 Zuma 一眼区间DP。 首先,我们将串压缩(即将相同颜色的相邻珠子合并)。记$col_i$为位置$i$的颜色,$sz_i$为位置$i$的珠子数。 我们设$f[i,j]\(表示消去区间\)[i,j]$中所有东西的最小步数。 则有: \(f[i,j]=\min\begin{ca 阅读全文
posted @ 2021-03-31 14:10 Troverld 阅读(79) 评论(0) 推荐(0)
摘要: CI.[IOI2009]salesman 思想非常simple:因为一次从上游往下游的转移,可以被表示成 \(f_i+(pos_i-pos_j)\times U\rightarrow f_j\ |\ pos_i<pos_j\land tim_i<tim_j\) 拆开括号,即可得到两半互不相关的部分。 阅读全文
posted @ 2021-03-31 14:09 Troverld 阅读(159) 评论(0) 推荐(0)
摘要: C.[POI2013]BAJ-Bytecomputer 首先先说猜想:最终序列中所有数都是$-1,0,1$,且不存在先改后面,后改前面的状态。 有了这个猜想,就可以DP了。我们设$f_{i,j}$表示要使位置$i$出现数$j$,且前$i$个位置单调不降的最小费用。则我们枚举往$a_{i+1}$上加多 阅读全文
posted @ 2021-03-31 14:07 Troverld 阅读(102) 评论(0) 推荐(0)
摘要: IC.[POI2007]ATR-Tourist Attractions 这题我一年半之前初学状压DP时就写了份没卡空间的做法,今天终于A了…… 首先,思路非常简单——我们可以使用Dijkstra预处理出来$2\sim k+1$中两两点之间的距离以及它们到$1$和$n$的距离。接着,设$f[i,j]$ 阅读全文
posted @ 2021-03-31 14:06 Troverld 阅读(113) 评论(0) 推荐(0)
摘要: LCVIII.[POI2006]PRO-Professor Szu 我要举报……本题数据与题面不符(事实上我已经举报了……),会有到不了主楼的情形,要特别考虑。 思路很简单,我们跑SCC缩点。假如一个SCC内部有自环,显然可以一直绕自环,故答案是无限;同时,所有可以走到该SCC的其它点答案都是无限。 阅读全文
posted @ 2021-03-31 14:04 Troverld 阅读(53) 评论(0) 推荐(0)
摘要: LCVII.[POI2013]LUK-Triumphal arch 明显题目具有可二分性。 考虑如何check。 我们发现,一个足够聪明的B,必定不会走回头路。故最终结果一定是一条从根到某个叶子的路径。 我们发现,如果一个父亲已经染掉了它所有儿子,它剩余的操作次数便可以去染儿子,以防到了某个儿子的时 阅读全文
posted @ 2021-03-31 14:03 Troverld 阅读(54) 评论(0) 推荐(0)