摘要: 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 阅读(46) 评论(0) 推荐(0) 编辑
摘要: VII.[HAOI2016]找相同字符 第一道自己做出的SA题祭~~~ 实际上和上一题没啥区别的说…… 我们发现,这题实际上就是对于两个串中所有的后缀求$\operatorname\(之和(因为这两个后缀共有\)\operatorname$个前缀是相同的,即串中有这么多子串是相同的)。 老套路,俩串 阅读全文
posted @ 2021-03-31 16:57 Troverld 阅读(60) 评论(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 阅读(44) 评论(0) 推荐(0) 编辑
摘要: V.UVA11107 Life Forms 这题同上题类似,只不过把“在全部串中出现”变成了“在超过一半(即$\left\lfloor\dfrac{2}\right\rfloor+1$)个串中出现”。 这题中我的方法是上题中提到的“two-pointers+单调队列”算法。第一遍跑求出所有满足“出现 阅读全文
posted @ 2021-03-31 16:54 Troverld 阅读(48) 评论(0) 推荐(0) 编辑
摘要: IV.[POI2000]公共串 后缀数组如何应对多个串的情况呢? 答案很简单:把所有串都拼起来! 但这又有个问题,拼起来的串不会出现一些错误吗? 没关系,这里就有解决方案了:在相邻的串间插入一个从未出现过的字符。 我们考虑在拼起来的字符串中求出$ht$数组。则仍然考虑二分公共子串长度$ip$,在$h 阅读全文
posted @ 2021-03-31 16:52 Troverld 阅读(62) 评论(0) 推荐(0) 编辑
摘要: III.[USACO06DEC]Milk Patterns G 同上一题思路类似,我们仍然建出后缀数组。 考虑任何出现$k$次的子串,以它们作为前缀的后缀在$sa$数组中一定是连续的——这一点可以从上文中的$\text$直接看出,因为相邻的结果一定大于等于不相邻的结果。 因此我们只需要求出$ht$数 阅读全文
posted @ 2021-03-31 16:49 Troverld 阅读(47) 评论(0) 推荐(0) 编辑
摘要: II.[USACO5.1]乐曲主题Musical Themes 一个显然的思路就是差分,这样子在原数组中差相等,就转为差分数组中子串相同。 我们考虑建出后缀数组。 显然,这个答案可以二分,则我们二分一个长度$ip$。 考虑$ht$数组。我们在所有$ht_i<ip$的地方切一刀,将$ht$数组切成多段 阅读全文
posted @ 2021-03-31 16:48 Troverld 阅读(54) 评论(0) 推荐(0) 编辑
摘要: I.不同子串个数 后缀数组在处理子串问题时往往有奇效,因为后缀的前缀即是子串,而后缀数组正是按照前缀排序的后缀。 回到本题。因为后缀的前缀是子串,则一条后缀与其它所有后缀的LCP的最长长度,即是这条后缀的前缀子串中所有被重复计数的串的数量。 我们掏出求得的$ht$数组。初学SA时大家一定接触过一个重 阅读全文
posted @ 2021-03-31 16:47 Troverld 阅读(254) 评论(0) 推荐(0) 编辑
摘要: Prufer序列是一种神奇的东西,其可以实现无根树与序列间的双射,并且在计数题、DP题、找规律题等等问题中有着不俗的表现。 (另,大部分时候,Prufer及其误拼Purfer、Purfur、Prefer等奇奇怪怪的变体是被混用了的) 首先,一棵 \(n\) 个节点的树的Prufer序列,是一长度为 阅读全文
posted @ 2021-03-31 16:46 Troverld 阅读(178) 评论(0) 推荐(0) 编辑
摘要: 这里是矩阵树定理学习笔记。线性代数基础详见线性代数学习笔记。 矩阵树定理是用来作生成树计数的好东西。其定理主要表述如下: 设 \(\mathbb{G}\) 为一无向图。则其无向无根生成树的数量,可以被如下算法求得: 设矩阵 \(S_1\),其中第 \(i\) 行第 \(j\) 列的数是 \((i,j 阅读全文
posted @ 2021-03-31 16:44 Troverld 阅读(188) 评论(0) 推荐(0) 编辑
摘要: XXVI.[AH2017/HNOI2017]单旋 先从单旋最小/大值的操作看起。手动模拟一下的话就会发现它对整棵树的形态几乎没有影响,就是断开最小值与它父亲的连边,并用其原本的右儿子(如果存在)替代。之后,将整棵树的根设作其新右儿子。最大值同理。 然后删除最小值也类似。注意删除一个原本就在树顶的最小 阅读全文
posted @ 2021-03-31 16:42 Troverld 阅读(88) 评论(0) 推荐(0) 编辑
摘要: XXV.Sasha and Algorithm of Silence's Sounds 假设我们把区间$[l,r]\(里的格子连出来,然后发现出现一个环,则我们可以肯定地说,所有具有\)[l,r]$作为子区间的区间,都是不合法的。 于是我们对于每个位置$l$,都可以找出其最右边的不成环的位置$r$。 阅读全文
posted @ 2021-03-31 16:37 Troverld 阅读(50) 评论(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 阅读(53) 评论(0) 推荐(0) 编辑
摘要: XXIII.CF603E Pastoral Oddities 结论1:只有点数为偶的连通块,才有可能使每个点的度数为奇。(偶连通块的必要性) 证明1:如果在奇连通块中,每个点的度数为奇,则总度数为奇,但是总度数必定是偶数(每条边增加两点度数),因此不可能存在奇的合法连通块。 结论2:任何点数为偶的连 阅读全文
posted @ 2021-03-31 16:34 Troverld 阅读(56) 评论(0) 推荐(0) 编辑
摘要: XXII.SP16580 QTREE7 - Query on a tree VII 它来了,它来了!LCT树套树的经典题,它来了! 虽然只是LCT套 std::multiset 而已 这题具体过程同QTREE6,不再赘述。唯一有区别的是,这题需要维护的是虚子树中最大值,不具有可减性。 因此,我们采用 阅读全文
posted @ 2021-03-31 16:32 Troverld 阅读(29) 评论(0) 推荐(0) 编辑
摘要: XXI.[ZJOI2016]大森林 论LCT的百种用法系列 这题有几个性质: 1.询问与时间无关。因为只是添加新点,原来点之间的位置关系不变。因此只要询问的两个点都被建出来了,何时进行询问并无影响。 2.操作重叠的部分很多。因为我们不管怎么加点,即使是加原树中没有的点,仍然有原来点之间的位置关系不变 阅读全文
posted @ 2021-03-31 16:30 Troverld 阅读(54) 评论(0) 推荐(0) 编辑
摘要: XX.SP16549 QTREE6 - Query on a tree VI 本题LCT全方面爆破树剖——无论是复杂度、码量、思维难度、代码难度,全都碾压树剖。并且,LCT容易模板化,但是树剖不容易——树剖搭配的线段树因题而异,而LCT只需要把$pushup$和$pushdown$稍微改改就可以直接 阅读全文
posted @ 2021-03-31 16:27 Troverld 阅读(60) 评论(0) 推荐(0) 编辑
摘要: XIX.首都 一句话题意:维护一棵森林,支持查询某棵树的重心以及所有树的重心的异或和。 众所周知,重心有如下性质:将两棵树之间连一条边后,新树的重心在原两棵树重心的连线上。 根据这一性质,我想了半天也没有想出来什么美妙的算法主要还是我splay没学好 首先,这道题正解有两个,一是LCT+启发式合并( 阅读全文
posted @ 2021-03-31 16:24 Troverld 阅读(63) 评论(0) 推荐(0) 编辑
摘要: XVIII.最小差值生成树 这题$m^2$暴力求最小生成树应该是过不去的……估计只有LCT能过去了。 然后就是同IV.[NOI2014]魔法森林一致的方法,排序之后暴力断边连边即可。 注意会有自环!!!虽然我也不知道为什么没判自环算我MLE…… 代码: #include<bits/stdc++.h> 阅读全文
posted @ 2021-03-31 16:23 Troverld 阅读(65) 评论(0) 推荐(0) 编辑
摘要: XVII.[SDOI2017]树点涂色 树剖和LCT学到最后实际上是殊途同归的……就比如说这题,可以用树剖,但是在操作$1$中借鉴了LCT的跳链思想;LCT则因为不能子树修改,按照dfs序需要建出线段树出来,实际上也就是树剖的思想了。 首先讲一下LCT写法。观察到任意时刻,任意一种颜色一定是一条深度 阅读全文
posted @ 2021-03-31 16:21 Troverld 阅读(64) 评论(0) 推荐(0) 编辑