“写sam是肯定会去写的,这样才学的了字符串,后缀数组又不会用 >ω<,

sam套上数据结构的感觉就像回家一样!

里面又能剖分又能线段树合并,调试又好调,我爱死这种写法了 !qwq”

SAM是一个DFA,它存储了某字符串的所有子串信息。

待更。

博主水平不行,尽量在退役前多更些。

插入字符:

 void extend(int id,int&now)
{
int p=now;
if(ch[p][id] && len[ch[p][id]]==len[p]+)
{
now=ch[p][id];
return;
}
int np=++tot;
len[np]=len[p]+;
while(p && !ch[p][id])
{
ch[p][id]=np;
p=fa[p];
}
if(!p)
{
fa[np]=;
}
else
{
int q=ch[p][id];
if(len[q]==len[p]+)
{
fa[np]=q;
}
else
{
int nq=++tot;
len[nq]=len[p]+;
fa[nq]=fa[q];
for(int i=;i<;i++)
ch[nq][i]=ch[q][i];
fa[q]=fa[np]=nq;
while(p && ch[p][id]==q)
{
ch[p][id]=nq;
p=fa[p];
}
}
}
now=np;
}

套路:

每条路径与子串一一对应。

$len_i$:该节点最长串的长度

$Parent Tree$上的子树和:串的出现次数

$len_i - len_{fa_i}$:该节点代表的串的数目

部分题目选:

(1)[SAM入门题][NOI2018]你的名字

题目链接

线段树合并维护$right$集合

(2)[SAM入门题][CTSC2012]熟悉的文章

题目链接

$SAM$只是用来预处理的,求答案还要靠二分+单队$DP$

(3)[SAM入门题][bzoj2555]Substring

题目链接

$LCT$对$Parent Tree$结构的维护

(4)[bzoj3277]字符串

题目链接

广义后缀自动机的应用

暴力搞复杂度大概是根号的,不会证明。

(5)[bzoj5084]HASHIT

题目链接

带撤销后缀自动机,随机数据随便艹。

upd:BFS建树形后缀树以后再进行DFS+树链求并统计答案就行了。

(6)[USACO]牛奶模式

题目链接

后缀自动机的基本原理与使用

(7)[洛谷元旦赛]WD与数列

题目链接

维护$right$集合的好题(似乎还要在parent树上跑启发式合并计算贡献,我并不会)

现在可能会了。

(8)[FZOJ2258]封印

校内题目,没连接

大概就是你知道$Parent$树是干啥的,形态如何,就能直接切掉。

(9)[TJOI2016]字符串

考虑求出 sam 上一个串 p 在 [l,r] 里出现的次数,这个可以通过数一数 p 的 right 集合里有多少在 $[l+len_p-1,r]$ 中出现。

lcp 可以二分,倍增可以从区间 locate 子串,那么这个题就 $O(n\log^2 n)$ 了。

upd:话说为啥没见过把状态设在sam节点上的DP题?

upd:CF700E,已经单独更新

(10)[十二省联考]字符串问题

题目意思大概是描述给你一个连边关系,求 DAG 上最长路。

直接暴力构图可以 $n^2$ ,用 hash 判断。

如果考虑建后缀树,那么在一个节点上有短->长的后缀关系,另外父子关系也是后缀关系,拆点据此连边即可。

只需要实现对区间 locate 子串即可,时间复杂度 $O(n\log n)$。

SAM(后缀自动机)总结的更多相关文章

  1. Distinct Substrings(spoj694)(sam(后缀自动机)||sa(后缀数组))

    Given a string, we need to find the total number of its distinct substrings. Input \(T-\) number of ...

  2. 弦论(tjoi2015,bzoj3998)(sam(后缀自动机))

    对于一个给定长度为\(N\)的字符串,求它的第\(K\)小子串是什么. Input 第一行是一个仅由小写英文字母构成的字符串\(S\) 第二行为两个整数\(T\)和\(K\),\(T\)为0则表示不同 ...

  3. LCS2 - Longest Common Substring II(spoj1812)(sam(后缀自动机)+多串LCS)

    A string is finite sequence of characters over a non-empty finite set \(\sum\). In this problem, \(\ ...

  4. LCS - Longest Common Substring(spoj1811) (sam(后缀自动机)+LCS)

    A string is finite sequence of characters over a non-empty finite set \(\sum\). In this problem, \(\ ...

  5. Lexicographical Substring Search (spoj7259) (sam(后缀自动机)+第k小子串)

    Little Daniel loves to play with strings! He always finds different ways to have fun with strings! K ...

  6. Substrings(SPOJ8222) (sam(后缀自动机))

    You are given a string \(S\) which consists of 250000 lowercase latin letters at most. We define \(F ...

  7. sam(后缀自动机)

    后缀自动机ins解释 void ins(int c){ int p=last;//将当前节点的parent节点变为last int np=++cnt;//建立新节点 last=np;//将last设为 ...

  8. Luogu P3346 [ZJOI2015]诸神眷顾的幻想乡 广义SAM 后缀自动机

    题目链接 \(Click\) \(Here\) 真的是好题啊-不过在说做法之前先强调几个自己总是掉的坑点. 更新节点永远记不住往上跳\(p = fa[p]\) 新建节点永远记不住\(len[y] = ...

  9. 字符串(tjoi2016,heoi2016,bzoj4556)(sam(后缀自动机)+线段树合并+倍增+二分答案)

    佳媛姐姐过生日的时候,她的小伙伴从某东上买了一个生日礼物.生日礼物放在一个神奇的箱子中.箱子外边写了 一个长为\(n\)的字符串\(s\),和\(m\)个问题.佳媛姐姐必须正确回答这\(m\)个问题, ...

  10. 后缀自动机SAM学习笔记

    前言(2019.1.6) 已经是二周目了呢... 之前还是有一些东西没有理解到位 重新写一下吧 后缀自动机的一些基本概念 参考资料和例子 from hihocoder DZYO神仙翻译的神仙论文 简而 ...

随机推荐

  1. active Directory域服务安装配置

    1.在Windows功能启用 2.安装一直下一步即可, 添加用户 添加域管理员 将普通用户添加到Domain Admins里

  2. DRF分页

    一.序列化 from rest_framework impost serializers from . models import * class GoodsSerializer(serializer ...

  3. 安装ipython[win/linux]

    首先以win7  64位系统, python2.7.9为例,linux见底部 1.下载材料http://files.cnblogs.com/files/smileyes/ipython-win64.z ...

  4. hz和s和脉冲

    先弄清楚定义,HZ是频率的单位,而s是周期的单位:而f=1/T. 故1hz=1s:5hz=1/5=0.02s; 占空比    占空比(Duty Ratio)在电信领域中有如下含义:    在一串理想的 ...

  5. Bugku-CTF之细心 (想办法变成admin)

    Day30     细心

  6. XSS 3

    打开第三题然后会看到 然后进行一下添加数据 然后会发现数据被添加到 value=""双引号中然后然后我们会想到提前闭合 代码 然后进行编码 然后就可以通过了 此题与xss 2类似 ...

  7. 吴裕雄 python 机器学习——局部线性嵌入LLE降维模型

    # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from sklearn import datas ...

  8. 常见的一些mysql多表操作收集(备份)

    原帖地址:https://blog.csdn.net/qq_37248648/article/details/78468291 多表操作框架 SELECT A.ID, A.NUMBER, A.PRIC ...

  9. 【 Struts2 配置】Struts2基本搭建

    struts.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBL ...

  10. .NET core 部署到Docker +Docker Protainer管理实现

    .NET core 部署到Docker +Docker Protainer管理实现 上次说到将.net core的应用程序发布到Linux中(https://www.cnblogs.com/Super ...