后缀自动机小结

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树丛叶子到跟的过程呢。

posted @ 2015-12-25 16:36  iamCYY  阅读(410)  评论(2编辑  收藏  举报