随笔分类 - 后缀自动机&后缀树
摘要:多次询问求一个串的结尾在$[l,r]$之间的本质不同子串个数。 此题是求一个区间的不同元素的问题,使用扫描线的方法解决,即每次加入一个元素就将这个位置$+1$,这个元素上一次出现的位置$-1$。 考虑使用$SAM$解决。 其实就是将所有结尾在$[l,r]$的前缀代表的节点与parent树的根的路径上
阅读全文
摘要:虽然是第二次学后缀自动机,这个学习的过程在我看来仍然是学习过程中最困难的,因为这个东西比较抽象,应用的性质很多,即使是构造理解起来也十分困难。另外,讲解这个东西的博客都太长了,一个一个写着预计阅读时间一个小时?而且看一句就要好好想一会,不时还要往上翻,晦涩的定义也太多了让人产生抗拒。 写得真的好 我
阅读全文
摘要:看一眼题。本质不同的字串数。 嘴角微微上扬。 每一次加一个数输出一个答案。 笑容渐渐消失。 等等,$SAM$好像也可以求本质不同的字串。 设当前字符串用$x$表示,每次插入完成后$ans$加上$len[x] len[fa]$就行了。 嘴角微微上扬。 等等,炸空间了。 笑容渐渐消失。 用$map$不就
阅读全文
摘要:给你一个串S以及一个字符串数组T[1..m],q次询问,每次问S的子串S[pl..pr]在T[l..r]中的哪个串里的出现次数最多,并输出出现次数。 如有多解输出最靠前的那一个。 我们首先对m个字符串数组建出后缀自动机,然后我们可以通过跳trans边找到S前i个字符代表的前缀的最长后缀。我们要找的是
阅读全文
摘要:感觉很水。 因为SAM上一个点的子树大小代表这个点所表示子串的出现次数。 建出广义后缀自动机之后。在$parent$树上跑$DP$,维护$size[i][1]$,和$size[i][0]$代表i的子树中有多少第一个串的结束节点和第二个串的结束节点,然后答案就是$size[i][0] size[i][
阅读全文
摘要:我们对 作文库 建出广义后缀自动机。考虑用$SAM$处理出来一个数组$mx[i]$,表示从作文的第$i$个位置向左最远在作文库中出现的子串的长度。这个东西可以在$SAM$上跑$trans$边来实现(其实求出来的是作文前i位在作文库中出现的最长后缀)。 处理出来这个东西,我们考虑用$DP$求答案。发现
阅读全文
摘要:喜闻乐见的LCT+SAM 此题要求动态插入,直接上后缀树。然后询问其实就是求一个节点的子树后缀结束节点的个数。 因为建立后缀树需要插入和删除,就直接上LCT。每次加入一个点,把它到根的路径加一 ~~(现在我才知道access之后那个splay就是这个点到根的路径,LCT学得不好)~~ 思路不需要说太
阅读全文
摘要:后缀自动机有一个性质。 就是如果倒建SAM两个串的lcp就是这两个串的结束节点的LCA。 然后就可以愉快的跑DP了。 对于每一个后缀树上的节点$u$,它对$len[u]$的贡献是$\sum_{v1}\sum_{v2\neq{v1}}size[v1] size[v2]$当然如果u就是一个后缀的结尾就要
阅读全文
摘要:解法一:后缀数组 听说后缀数组解第k小本质不同的子串是一个经典问题。 把后缀排好序后第i个串的本质不同的串的贡献就是$n-sa[i]+1-LCP(i,i-1)$然后我们累加这个贡献,看到哪一个串的时候,这个贡献的和大于等于k,然后答案就在这个串里了,然后枚举就行了。 那么第k小子串该怎么办? 我们考
阅读全文

浙公网安备 33010602011771号