关闭
当前搜索:

[LCT 主席树] BZOJ 3514 Codechef MARCH14 GERALD07加强版

N个点M条边的无向图,询问保留图中编号在[l,r]的边的时候图中的联通块个数。 先预处理 按时间做一通最大生成树 每次加边 ii 替换树上的最小边 记这条边为 a[i]a[i] 特殊的 如果本来不连通 a[i]=0a[i]=0 如果是自环 a[i]=ia[i]=i对于每个询问[l,r][l,r],统计区间[l,r][l,r]中有多少个数小于ll,用nn去减即可得答案 为什么呢 因为替换了...
阅读(171) 评论(0)

[Notes] 后缀自动机学习笔记

作为蒟蒻很羞耻的不会后缀自动机 于是去学 然后会发现blog已经被后缀自动机刷屏了 我学的SAM姿势有点奇怪 学习资料 最初是在这里学的 SUFFIX AUTOMATON by- saisumit 业内公认的是这个 MAXimal :: algo :: Суффиксный автомат. Построение и применения 有关后缀树看fhq 后缀自动机与线性构造后缀树...
阅读(237) 评论(0)

[二进制分组 AC自动机] HDU 4787 GRE Words Revenge

这个如果单次询问的话应该是个AC自动机裸题 多次询问本来可以按时间分治 但是强制在线 就可以用xhr的二进制分组方法 浅谈数据结构题的几个非经典解法 也可以看CA的博客 【从此不怕强制在线】二进制分组学习笔记 大致思想是修改按二进制分组 这样最多log组 每次询问的复杂度会多一个log 合并的均摊复杂度也是log的#include #include #in...
阅读(277) 评论(0)

[Treap套权值线段树 线段树分裂与合并] BZOJ 4552 [Tjoi2016&Heoi2016]排序

线段树合并写了不少 分裂是第一次 直接每一个有序区间用一棵权值线段树维护有哪些数 外层用treap维护顺序 然后排序就把代表这段的很多颗线段树合并在一起 两端处会割开某个有序区间 会涉及分裂操作#include #include #include using namespace std;inline char nc(){ static...
阅读(388) 评论(0)

[后缀自动机 线段树] BZOJ 1396 识别子串 & BZOJ 2865 字符串识别

后缀自动机建起来发现出现一次的子串必然由|right(x)|==1的状态也就是叶子节点贡献 对于每个叶子x 在串上的位置为p 令l为maxs(x) 令r为maxs(fat(x)) 那么区间[p-r+1,p]用r+1更新答案 区间[p-l+1,p-r]用一条斜率为-1的线段更新答案 这个可以暴力跑李超线段树 但是这道题很特殊啊 直接上两颗线段树分别维护两种情况就好了上2865的代码吧 这题t...
阅读(267) 评论(0)

[广义后缀自动机 set启发式合并 || dfs序 树状数组 离线] BZOJ 2780 [Spoj]8093 Sevenk Love Oimaster

可以直接用[广义后缀自动机] BZOJ 3473 字符串 & BZOJ 3277 串 & Codeforces 204E #129 (Div. 1) E. Little Elephant and Stringsset启发式合并的方法 还有一种是离线做法 通过dfs序转化为一段区间内不同数字的数量 就是 [SDOI2009]HH的项链的经典做法啦#include #includ...
阅读(178) 评论(0)

[广义后缀自动机 Trie树] BZOJ 3926 [Zjoi2015]诸神眷顾的幻想乡

因为叶子节点很少 我们把20个trie合并成广义后缀自动机 然后直接跑就好了 trie树构建自动机的时候 回溯的时候把last还原#include #include #include #include #include using namespace std; typedef long long ll;inlin...
阅读(187) 评论(0)

[广义后缀自动机] BZOJ 3473 字符串 & BZOJ 3277 串 & Codeforces 204E #129 (Div. 1) E. Little Elephant and Strings

现在给定你n个字符串,询问每个字符串有多少子串(不包括空串)是所有n个字符串中至少k个字符串的子串(注意包括本身)广义后缀自动机的模板题啦 构建方法和单串的自动机是基本一样的 每次考虑完一个串把last返回root#include #include #include #include #include using...
阅读(252) 评论(0)

[后缀自动机 模板题 || 字符串Hash] HDU 4622 Reincarnation

题目大意:询问子串lr的不同子串数目 暴力建n次后缀自动机 存一下不同子串数目就好啦 不同子串数目 有两种做法 一种是按拓扑序DP 还有就是∑maxs(x)−maxs(fa(x))\sum maxs(x)-maxs(fa(x)) 显然第二种方法更好些 更通用#include #include #include #include<cs...
阅读(267) 评论(0)

[替罪羊树 动态标号 线段树] BZOJ 3600 没有人的算术

好题啊 首先肯定是线段树 那么考虑我们怎么比较两个数的大小 采用CLJ在重量平衡树和后缀平衡树在信息学奥赛中的应用中提到的标号思想 不妨令每个节点表示一个区间 用区间的中值代表这个数的大小 具体实现是我们不仅要给每个点记录 l,r,mid 还要记录 x y 表示他等价于(x,y)的组合 因为新插入数是没有标号的 只能按定义比较first和second 注意0小于任何数 我没想到好的方法...
阅读(198) 评论(0)

[替罪羊树 模板题] BZOJ 3224 Tyvj 1728 普通平衡树

替罪羊树的模板题 关于删除 有人说按照BST的方法删 那样讨论太烦啦 直接打个标记表示已被删 下次重构的时候丢掉就好了#include #include #include using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if...
阅读(328) 评论(0)

[二分 后缀自动机 单调队列优化DP] BZOJ 2806 [Ctsc2012]Cheat

先在后缀自动机上匹配 求出mat[i]表示作文的每个位置i为结尾最长能匹配多长二分L 设f[i]表示前i个字符熟悉的部分最多有多长 那么f[i]=max(f[i-1],f[j]+i-j) 其中j要满足i-j>=L&&i-j+1<=mat[i] 得i-mat[i]<=j=mat[i+1] 得i+1-mat[i+1]>=i-mat[i] 所以i-mat[i]...
阅读(140) 评论(0)

[后缀自动机 LCT] BZOJ 2555 SubString

构建后缀自动机 parent树会改变形态 这样|right(x)|也会发生变化 我们用LCT大力维护一发就好了#include #include #include #include using namespace std;inline char nc(){ static char buf[100000],*p1=buf,...
阅读(127) 评论(0)

[后缀自动机 构建后缀树 树形DP] BZOJ 3238 [Ahoi2013]差异

反串的parent树就是后缀树 lcp就是他们的lca的深度 也就是后缀自动机上的maxl 然后树形DP一下就好了#include #include #include using namespace std; typedef long long ll;inline char nc(){ static char buf[100000],*...
阅读(128) 评论(0)

[后缀自动机 parent树] BZOJ 4566 [Haoi2016]找相同字符

对一个串A建自动机 另一个串B在上面匹配 考虑统计答案 对于当前匹配到的点,那么它parent树中的祖先代表的串现在肯定也出现了 对于每个出现的点,它代表了maxs[x]-maxs[fa[x]]个串 这些串出现了|right(x)|次,贡献就是|right(x)|*(maxs[x]-maxs[fa[x]]) 因为要统计祖先的,所以把祖先的也累加到这个节点即可#include...
阅读(166) 评论(0)

[后缀自动机] POJ 1743 Musical Theme

又一道男人八题哦 先差分 然后就是找出现两次的不相交的最大子串 考虑对于每个点 记录它的right集的最值 用差值和maxl的最小值更新答案#include #include #include #include #define cl(x) memset(x,0,sizeof(x)) using namespace std;...
阅读(205) 评论(0)

[K大子串 后缀自动机 模板题] BZOJ 3998 [TJOI2015]弦论

题目大意:分别求 重复子串算一次 重复子串算多次 的 K小子串若重复子串算一次 那么每个状态计数1次 若重复子串算多次 那么每个状态计数|right(x)|次 然后跑就好了#include #include #include using namespace std;inline char nc(){ static char buf[10...
阅读(184) 评论(0)

[最小循环表示 后缀自动机 模板题] BZOJ 2882 工艺

题目大意:最小循环表示有O(n)O(n)的简洁巧妙的解法 但是为了练习后缀自动机 把串复制一遍,构建后缀自动机,每次选择最小的边转移即可 因为字符集很大,所以转移边用map来存即可#include #include #include #include using namespace std;inline char nc(){...
阅读(256) 评论(0)

[后缀自动机 模板题] SPOJ 8222 Substrings

题目大意:求某个长度的所有子串中出现次数最多的次数每个状态对应一段长度区间的子串 right集合的大小就是出现次数 那么我们用|right(x)|去更新f[maxs[x]]的值,最后从大到小用f[i]去更新f[i-1]的值即可#include #include #include using namespace std;inline char...
阅读(289) 评论(0)

[后缀自动机 模板题] SPOJ 1812 Longest Common Substring II & BZOJ 2946 [Poi2000]公共串

后缀自动机模板题啦 对一个串建后缀自动机,其他串在上面匹配 每个状态记录每个串最长匹配长度的最小值 然后找到所有状态中答案最长的一个即可 需要注意的是这里不仅要用到自动机的性质 还要用到树的性质 如果一个状态被走到了 那么他的link也一定出现了 因为link对应的就是这个东东的一个子串 而我们跑自动机的时候不一定跑到了link这个点说来说去就是循环里的第三行for (int i=ncnt...
阅读(175) 评论(0)
54条 共3页1 2 3 下一页 尾页
    个人资料
    • 访问:309422次
    • 积分:12408
    • 等级:
    • 排名:第1311名
    • 原创:969篇
    • 转载:3篇
    • 译文:0篇
    • 评论:54条
    最新评论