图论——后缀自动机
JeremyGJY
然而并没有什么好说的
展开
-
【后缀自动机】[HDU 4641]K-string
题目大意:多个询问,给出一个原始的字符串,多次操作每次要么在原串的末尾加入一个新的字符,要么询问当前的字符串中有多少个子串重复出现了至少k次实际上和大部分后缀自动机的题目差不多,根据后缀自动机的原理建完树之后实际上每一个节点到root的最路径的所有种数实际上就是每一个子串那么在每一个节点开一个number表示当前这个子串被匹配的次数,然后pre一定是当前子串的子串那么number[pre] += n原创 2015-06-17 13:36:30 · 636 阅读 · 0 评论 -
【后缀自动机】[SPOJ LCS]Longest Common Substring
模板题目,感觉和用AC自动机差不多,就是一个一个字符在自动机里面匹配,找不到就沿着失配边往上走,然后如果当前节点变成了null那么就不能继续匹配,就把当前设置成root然后len变成0,否则就沿着边继续走,然后把len变成当前的节点的len+1因为是失配边,所以前边的都可以匹配,变成当前的len+1#include <cstdio> #include <cstring> #include <algo原创 2015-06-06 14:34:50 · 883 阅读 · 0 评论 -
【后缀自动机】[SPOJ LCS2]Longest Common Substring II
思路就是对于建立第一个串的SAM然后存储每一个节点和当前的这个串能够匹配的最大长度,然后存储对于当前的这个节点全局的能够匹配的最小长度,然后每次更新完当前之后要对每个节点根据len排序然后向前对失配边的上一个节点的当前能够匹配的最大长度进行更新,就是{原来的匹配最大长度, 原来的len, 当前节点的最大匹配} 最后在全局匹配的变量里面取最大值就行了#include <cstdio> #include原创 2015-06-06 15:56:59 · 1198 阅读 · 0 评论 -
【后缀自动机】[SPOJ SUBLEX]Lexicographical Substring Search
题目大意,给定一个字符串求第K大的子串 首先给这个字符串建立SAM然后发现实际上每一个节点就可以表示一个子串然后实际上就是从root到这个节点的路径,然后按照splay的那种思路建立size然后用k去找在当前节点的哪一个子树中,然后减去当前子树的size就可以得到在下一个子树中的位置,然后重复当前操作就可以,得到这个字符串#include <cstdio> #include <cstring> #原创 2015-06-06 21:17:24 · 589 阅读 · 0 评论 -
【后缀自动机】[BZOJ 2806]Cheat
题目描述:就是给你多个01串当作字典然后给你另一个01串问你这个01串长度90%以上被匹配时的分段匹配的段的最大值L0L_0(这个最大值是当前分段每一段的最小值,就是每一段长度都大于这个值,求这个值的最大值) 我看到这道题就知道要把所有的字典的串合成一个串来搞,原来弄过一个AC自动机的题目和这个描述很像,自然而然就这么弄了,建立SAM的时候每一个串之间弄个分隔符。原因不说了。现在我们只要先求出每一原创 2015-06-11 22:28:27 · 680 阅读 · 0 评论 -
【后缀自动机】【SAM】【自动机】【数据结构】后缀自动机理解(入门)
引入来吧后缀自动机 我们先来看一看后缀数组可以干一些什么事情 1.可以查看当前后缀在所有后缀的排名 2.可以看子串的最大和 但是缺点呢却也非常的明显——显然这tm是个静态的。。。。 于是只好另辟蹊径——后缀自动机 我们来看看后缀自动机可以干一些什么: 1.可以查看当前后缀在所有后缀的排名 2.可以看子串的最大和 3.动态插入新的节点 4.空间开销小 ……. 擦既然这么多优点为什原创 2016-04-08 07:48:31 · 3700 阅读 · 2 评论