随笔分类 - 数据结构->可持久化数据结构
摘要:题解 把S串建一个后缀自动机 用一个可持久化权值线段树维护每个节点的right集合是哪些节点 求本质不同的子串我们就是要求T串中以每个点为结束点的串有多少在$S[l..r]$中出现过 首先我们需要对于T串每个点本身和自己的匹配长度,可以建一个后缀自动机来完成 然后把T串放在S串上跑匹配,匹配到下一个
阅读全文
摘要:"【51nod】2564 格子染色" 这道题原来是网络流…… 感觉我网络流水平不行…… 这种只有两种选择的可以源点向该点连一条容量为b的边,该点向汇点连一条容量为w的边,如果割掉了b证明选w,如果割掉了w证明选b 那么$p$的限制怎么加呢,新建一个点$i'$,然后$i$往$i'$流一条容量为$p$的
阅读全文
摘要:题解 可持久化可并堆 用$f[i,j]$表示最大的质数标号为i,然后有j个质数乘起来 用$g[i,j]$表示$\sum_{k = 1}^{i}f[k,j]$ 转移是 $f[i,j] = \sum_{k= 1}^{j} g[i 1,j k] p_{i}^{k}$ $g[i,j] += f[i,j]$
阅读全文
摘要:题解 题面太长无法阅读系列…… 这里说的选择改变指的是在下面区间里碰上了一个更长的可匹配的地址,如果可匹配但是匹配长度没有当前的值大,那么不算改变 我们建一个可持久化的trie,查询的时候先在前$a 1$个里找到最长的可以得到的地址 然后再在区间的trie里找到那条链上,如果碰到一个结束点且比我们初
阅读全文
摘要:题解 感觉全世界都写过只有我没写过 毕竟是板子还是挺简单的,只要用可持久化线段树维护一下数组的形态就好了,每个数组里面维护这个数组的father,和这个点所在树的最长链的深度(如果这个点是根按秩合并要用) 为了避免返回两个值可以直接返回所在线段树节点的编号 代码 cpp include includ
阅读全文
摘要:题解 题目太丧,OJ太没有良心,我永远喜欢LOJ! (TLE报成RE,垃圾洛谷,我永远喜欢LOJ) 好的,平复一下我debug了一上午崩溃的心态= =,写一写这道题的题解 把所有限制去掉,给出一个值,和一堆数种选一个异或起来求最大值,是一个经典的字典树问题,如果去掉了d的限制,我们类似主席树那样求一
阅读全文
摘要:题解 (搬运一个原来博客的论文题) 抱着板题的心情去,结果有大坑 就是S == T的时候也一定要走,++K 我发现按照论文写得$O(n \log n + m + k \ log k)$算法没有玄学A 快,不开心啊(或者我松教水平不高啊) 论文里主要是怎么样呢,把所有边反向,从T开始求最短路,然后求一
阅读全文
摘要:题解 在trie树上开vector记录一下这个前缀出现次数第一次达到某个值的下标,以及记录一下现在这个前缀有多少个 为什么thusc有那么水的题……是为了防我这种cai ji爆零么= = 代码 cpp include include include include include include /
阅读全文

浙公网安备 33010602011771号