后缀自动机
Vectorxj
这个作者很懒,什么都没留下…
展开
-
[后缀自动机][树形DP] BZOJ 3238: [Ahoi2013]差异
SolutionSolution反串的后缀自动机就是原串的后缀树,在后缀树上树形DP即可。 maxumax_u即是点uu的深度,|rightu||right_u|即是点uu的子树大小。#include <bits/stdc++.h>using namespace std;const int N = 1010101;typedef long long ll;inline char get(voi原创 2017-12-23 10:52:11 · 286 阅读 · 0 评论 -
[后缀自动机][树形DP] BZOJ 4566: [Haoi2016]找相同字符
SolutionSolution又看了半天的SAM,感觉这次看陈老师的讲稿流畅多了。。 这道题的话,对AA串建自动机,BB串在上面匹配。 BB匹配到状态uu贡献就是|rightu|∗(len−minu+1)=|rightu|∗(len−maxparu)|right_u|*(len-min_u+1)=|right_u|*(len-max_{par_u})。 再考虑匹配到这个点的话,必然在pare原创 2017-12-22 20:48:12 · 340 阅读 · 0 评论 -
[后缀自动机][单调队列优化DP] BZOJ 2806: [Ctsc2012]Cheat
SolutionSolution对mm个串建立后缀自动机。 对nn个串单独考虑: 显然答案可以二分。 记pip_i表示这个串的ii位置可以在SAM上匹配到的最长长度。 考虑DP:fif_i表示考虑前ii个字符,最长熟悉字符串的长度。fi=max{fi−1,fj−j+i},L≤i−j≤pif_i=max\{f_{i-1},f_j-j+i\},L\le i-j\le p_i分析一下有贡献的区间j原创 2017-12-23 18:45:46 · 370 阅读 · 0 评论 -
[后缀自动机][LCT] BZOJ 2555: SubString
SolutionSolution出现的次数就是匹配到的点的righturight_u集合大小。 一个点的|rightu||right_u|有变化会对parentparent树上的祖先造成相应的改变。 因为这题强制在线,所以就用LCT维护|rightv||right_v|啦。#include <bits/stdc++.h>#define show(x) cerr << #x << " = " <原创 2017-12-23 20:43:08 · 275 阅读 · 0 评论 -
[树形DP][后缀自动机][后缀树] CodeChef January Challenge 2018 KILLKTH
SolutionSolution反串的后缀自动机的parent树就是原串的后缀树。 按dfs序记录子树大小前缀和,二分位置。 定位后就可以在节点内二分(可以直接算的啦)#include #define show(x) cerr using namespace std;typedef long long ll;typedef pairint, int> Pairs;con原创 2018-01-23 21:04:39 · 322 阅读 · 0 评论 -
[后缀自动机][阈值] LOJ #6031. 「雅礼集训 2017 Day1」字符串
Solution" role="presentation" style="position: relative;">SolutionSolutionSolution因为qk=P" role="presentation" style="position: relative;">qk=Pqk=Pqk = P是一个常数,想到可以阈值。 当k<S" role="presentation原创 2018-01-25 17:58:09 · 952 阅读 · 0 评论 -
[后缀自动机][树上启发式合并] LOJ #6041. 「雅礼集训 2017 Day7」事情的相似度
SolutionSolutionSolutionO(nn−−√logn)O(nnlogn)\mathcal{O}(n\sqrt n\log n)的莫队连500005000050000都过不了qwq。%%%gjghfdgjghfd教我SAM+树上启发式合并的做法。 每两个后缀的贡献会在LCA处统计到。 一个暴力的想法就是枚举LCA,那就只需要考虑子树中的点对。有实际贡献意义的就...原创 2018-03-07 10:23:30 · 469 阅读 · 0 评论