
后缀自动机
文章平均质量分 78
chty_syq
HA省的OIer
展开
-
最长公共子串 后缀自动机
【题目描述】给定两个字符串A和B,求它们的最长公共子串【分析】我们考虑将A串建成后缀自动机令当前状态为s,同时最大匹配长度为len我们读入字符x。如果s有标号为x的边, 那么s=trans(s,x),len = len+1否则我们找到s的第一个祖先a,它有标号为x的边,令 s=trans(a,x),len=Max(a)+1。如果没有这样的祖先,那么令s=root,len原创 2017-02-21 10:10:14 · 522 阅读 · 0 评论 -
【spoj8222】Substrings 后缀自动机
AC通道:http://www.spoj.com/problems/NSUBSTR/【题解】我们知道,在SAM上对于一个结点s,Max(s)的出现次数就是right(s)那么问题就是我们如何求出每个点的right集的大小。我们知道,一个点的right集为它的儿子的right集的并集,所以我们按照拓扑序遍历每个点,同时更新它父亲的答案。#include#include#inc原创 2017-02-21 21:35:52 · 338 阅读 · 0 评论 -
【spoj1812】Longest Common Substring II 后缀自动机
AC通道:https://vjudge.net/problem/SPOJ-LCS2【题解】我们先把其中一个串建成SAM,然后让其它的串在SAM上跑,同时更新每个结点的最大匹配数。每个结点的答案就是所有串在该结点的最大匹配数的最小值。注意:在更新一个结点时,它的父亲必定已经到达过了,要返回去更新父亲的答案。#include#include#include#include#in原创 2017-02-21 19:00:05 · 348 阅读 · 0 评论 -
【bzoj2555】SubString 后缀自动机+LCT
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=2555【题解】我们把模板串建成SAM,那么一个串的出现次数就是在对应状态上的Right集的大小。那么我们如何在线维护Right集的大小呢?可以用LCT/平衡树+dfs序反正我用的是LCT,毕竟好写。我们用LCT维护parent树,对于新加入的点,连一条通向parent的边原创 2017-02-22 16:09:32 · 452 阅读 · 0 评论 -
【bzoj4566】找相同字符 后缀自动机
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=4566【题解】我们还是先把A串建成SAM,然后让B串在SAM上跑因为相同子串数=不同长度的子串数*出现次数所以每个结点对答案的贡献就是Right[x]*(len-Min(x)+1)我们知道SAM的一个性质:Min(x)-1=Max(parent(x))所以贡献就是Ri原创 2017-02-22 20:33:29 · 411 阅读 · 0 评论 -
【bzoj3238】差异 后缀自动机
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=3238【题解】题上所给公式可以化为\sum_{1其中:\sum_{1=1×(n-1)+2×(n-2)+3×(n-3)+……+(n-1)×1+2×1+3×2+……+n×(n-1)=(n+1)+2×(n+1)+3×(n+1)+……+(n-1)(n+1)=(1+2+原创 2017-02-23 07:33:16 · 481 阅读 · 0 评论