后缀自动机小结
2555: SubString
要支持动态维护right集合的大小,用LCT维护parent树即可。
2882: 工艺
最小表示法。从根节点开始走n步,每次选可选的字典序最小的转移即可。
2806: [Ctsc2012]Cheat
答案显然满足可二分性,于是我们二分l。
设f[i]为i以前最大的熟悉长度,mat[i]代表位置i以前和母串最多匹配多少位。
f[i]=max(f[i-1],f[j]+i-j),i-mat[i]<=j<=i-l。
因为mat[i]<=mat[i-1]+1,所以可以转移的区间的左右端点是不减的。于是就变成了经典的单调队列优化。
3238: [Ahoi2013]差异
s的反串s'的后缀自动机的parent树就是s的后缀树,然后两个后缀suffix(x)和suffix(y)的lcp=lca(x,y)对应的最大子串长度。
在parent树上进行一边树形dp即可,计算lca贡献的答案。
2946: [Poi2000]公共串
记录当前结点的这次最长匹配长度和历史最小匹配长度。注意要将匹配长度向祖先更新。
3926: [Zjoi20150]诸神眷顾的幻想乡
枚举叶子建出广义后缀自动机即可。
3756: Pty的字符串
在parent树上预处理一些值最后匹配一次就好。
1396: 识别子串
考虑枚举只出现一次的子串的右端点,它对应的左端点一定是从1开始到对应最短位置p的区间。
对于[1,p],我们可以更新的长度是一条斜率为-1的直线。对于[p+1]到右端点,可以更新的长度为定值。
按截距排序,用并查集做两次就好。
3473: 字符串
建出广义后缀自动机,这样对于每个字符串的前缀,trans(root,prefix)的对应最大子串长度一定等于|prefix|。
统计每个状态字符串的出现在多少个字符串中,对于出现次数>=k的状态我们可以将它维护的子串数量加入答案。
3145: [Feyat cup 1.5]Str
感觉后缀数组按height大到小合并的过程就是parent树丛叶子到跟的过程呢。