后缀自动机做题记录
Posted lcyfrog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了后缀自动机做题记录相关的知识,希望对你有一定的参考价值。
目录
后缀自动机做题记录
来填之前的坑了。。。考后大概会做做有字符串的综合题吧
sp1811
lcs板子,对于第一个串建出SAM,第二个串在上面跑,即可求出对于每一个位置的后缀的最大匹配长度
sp1812
n串lcs板子,对于每个节点去min即可,但是要注意到当前答案对parent子树上儿子答案取max
sp10570
上面的那个改个多组数据,水水经验 (两分钟获得快乐不是很划算吗
luogu 2463
上面那个的变形,加个差分,数据贼小,输入处理有 丶难敲
CF873F
如何求出每个点的right集合大小? dfs求size即可,对于原串上的点sz初值为1
也可以基数排序求出拓扑序然后倒序求
此题中对于被禁止的点sz处理一下就行了
TJOI2015 弦论
对于每个点,算多次的sz为right集合大小,算一次的sz为1
然后像平衡树上那样递归找就行了,复杂度O(n)
AHOI2013 差异
考虑(parent)树上每条边的边权赋为(len(i)-len(fa_i)),这样两个节点的贡献就是他们到lca的路径权值和,答案是所有路径权值和
然后考虑有多少条路径经过当前边就可以了
HEOI2016/TJOI2016 字符串
考虑二分答案,即为前缀长度,倍增到对应的SAM的点,check一下当前点的endpos是否有包含[a,b],在parent树上线段树合并预处理出来即可
HAOI2016 找相同字符
考虑把两个拼接起来,parent树上每个节点代表一些字符串,且他们出现的位置是等价的
就可以记录一下在A/B中出现的位置然后统计一下
SDOI2016 生成魔咒
先考虑一个问题:如何用SAM求本质不同的子串个数?
和上面差不多,在parent树上每个点代表一些字符串,且不会重复,每次新加入的点算一下就可以了,拆点不会影响答案
注意此题字符集比较大,用map存出边
ZJOI2015 诸神眷顾的幻想乡
trie树上SAM,参考刘研绎在2015年写的国集论文
留坑待填
要准备NOIP了(悲
广义SAM
就是每次把last拉到1
其他
NOI原题练习
以上是关于后缀自动机做题记录的主要内容,如果未能解决你的问题,请参考以下文章