后缀自动机
gjghfd
这个作者很懒,什么都没留下…
展开
-
bzoj3238 [ AHOI2013 ] --后缀自动机
显然只需求LCP(i,j)就可以了。 将s反转,然后插入后缀自动机。由于后缀自动机的link指针构成了一棵后缀树,而字符串又反转过,所以两个结点的LCP就是LCA。 树形DP,求出以每个结点为LCA的个数就可以了。 代码: 1 #include 2 #include 3 #include 4 using namespace std; 5 #define N 500001 6 #原创 2017-05-26 16:42:05 · 219 阅读 · 0 评论 -
bzoj3998 [ TJOI2015 ] --后缀自动机
题目大意: 对于一个给定长度为N的字符串,求它的第K小子串是什么。 思路: 先对s构造后缀自动机。 令g[x]为x节点代表的字符串个数 当T=0时,g[x]=1 当T=1时,由于link指针将自动机构成了一颗后缀树,所以每个节点的g就是子树中的g之和。 令f[x]为x节点之后有多少种字符串。 f[x]=Σf[next[x][i]],0 按照max_size拓扑排序一遍,然后利用f[x]就可以找原创 2017-05-26 16:42:00 · 203 阅读 · 0 评论 -
bzoj2555 -- 后缀自动机+LCT
构建出后缀自动机后在自动机上找到strstr在failfail指针构成的树中的位置,子树大小就是答案。 我们可以用LCT维护后缀自动机,添加字符时链上修改就可以了。 时间复杂度O(|S|log|S|)O(|S|\log |S|)原创 2017-07-04 17:21:07 · 255 阅读 · 0 评论 -
[ 后缀自动机 树上启发式合并 线段树 树状数组 ] [ 雅礼集训 2017 Day7 ] LOJ#6041
对原串建后缀自动机,222 个前缀的最长公共后缀就是其反串的后缀树中对应点的 lcalcalca 的 lenlenlen 值。 现在问题转化为:给定一棵树,求编号在 [l,r][l,r][l,r] 的 222 个点的 lcalcalca 的最大深度。 考虑一个暴力的做法:枚举树上每个点作为 lcalcalca ,将其子树中所有点按编号排序,那么对于每个点,离它最近的 222 个点一定是最优的,...原创 2018-03-07 07:05:28 · 433 阅读 · 0 评论 -
[ 树链剖分 后缀自动机 ] Codeforces504E Misha and LCP on Tree
对原树树链剖分,那么一条链可以表示成 O(logn)O(logn)O(\log n) 段区间。然后问题就转化为求两段区间的 lcplcplcp ,将每条重链正反都加入一个字符串中,构建出后缀自动机,求 lcalcalca 即可。 时间复杂度 O(nlogn+mlog2n)O(nlogn+mlog2n)\mathcal{O}(n\log n+m\log^2 n) 。 #include<...原创 2018-03-30 19:52:27 · 339 阅读 · 0 评论