Trie图(AC自动机)总结
AC自动机构建完成后,某个节点沿着Fail链向上能从长到短走到自己的所有后缀。一般的,遍历主串进行匹配,就是在Trie图上定向移动的过程。
构造(一遍 BFS)
void build_AC()
{
int u=;
for(int i=;i<;i++)
if(ch[u][i])q[r++]=ch[u][i];
while(l<r)
{
u=q[l++];
for(int i=;i<;i++)
if(ch[u][i])
{
fail[ch[u][i]]=ch[fail[u]][i];
flag[ch[u][i]]|=flag[fail[ch[u][i]]];
q[r++]=ch[u][i];
}
else
ch[u][i]=ch[fail[u]][i];
}
}
1、模式匹配
主串从左到右,就顺着每一个字符向下跳,每一次沿着Fail链向上。这样会可重而不漏的得到模式串中的所有子串,视题目要求进行操作即可。
(1)TJOI2013 单词:本人的LJ做法,把所有串建Trie图,再把所有串拿 # 接起来,然后暴力匹配。
2、利用Fail链进行预处理
(1)不可到达(危险)节点标记:一个串的后缀是危险的,它即是危险的
(2)某些统计:到达某个串结尾处相当于匹配了它和它的所有后缀,可以进行一些sigma之类的操作
3、与Trie图性质相关
(SDOI2005 病毒)模拟一个字符串在Trie图上匹配的过程,危险节点不可走。在此基础上找环。
4、AC自动机相关某些题目
(1)HNOI2004 L语言 :在模式串结尾记LEN,一边模式匹配一边 DP,
(2)USACO2015 删减:在模式串结尾记LEN,维护一个栈,匹配成功时把栈顶上LEN个元素拿走
(3)JSOI2009:密码:在Trie图上进行记忆化搜索(记录所有串的选取状态)输出方案好恶心的
5、Trie图上的DP
一般的,设出如下状态:
:做到主串第 i 个位置,在Trie图上的 j 点,……。
转移: 使用刷表法DP,必要时上矩阵进行优化。
初始状态是 。
(1)Fzoj DNA修复:不能往危险节点跑,然后直接。
(2)Fzoj 匹配:状压,,Flag事先预处理。
(3)Fzoj 中等的字符串:, 构造矩阵转移,类似求 N 条边最长路。
扔一份 暴力DP 的代码:
void dp()
{
for(int i=;i<=n;i++)
for(int j=;j<=tot;j++)
f[i][j]=-inf;
f[][]=;
for(int i=;i<n;i++)
for(int j=;j<=tot;j++)
if(f[i][j]>=)
for(int x=;x<;x++)
{
int k=ch[j][x];
f[i+][k]=max(f[i+][k],f[i][j]+num[k]);
}
}
(4)BJOI2016 打字机:不可做
(5)BJOI2017 魔法咒语:1-6号点暴力做,7-8用转移矩阵,9-10类似 Fib 那样进行转移,挺毒瘤的。
6、Fail树性质(Fail 链自下而上的后缀关系)
一般用于解决与多串相关的子串计数问题。
(1)阿狸的打字机:按题意模拟建 Trie 树,按题意模拟在 Trie 图上跑,走到+1离开-1,用 BIT 维护子树和。
(2)COCI2015 Divljak:先对 Alice 的串建 Trie 图,由 Fail 树性质原问题等价于解决“树链求并”的计数问题,解决方法我是抄题解的:对链的各个底端端点按 dfs 序排序,在各个点处 +1,在相邻两点 LCA 处 -1(想一想为啥)。树剖求 LCA 即可。子树和仍然使用 BIT 维护。
Trie图(AC自动机)总结的更多相关文章
- BZOJ 1444 [JSOI2009]有趣的游戏 (Trie图/AC自动机+矩阵求逆)
题目大意:给你$N$个长度相等且互不相同的模式串,现在有一个字符串生成器会不断生成字符,其中每个字符出现的概率是$p_{i}/q_{i}$,当生成器生成的字符串包含了某个模式串,则拥有该模式串的玩家胜 ...
- 1036 : Trie图 (AC自动机)
题目大意: 输入 n 个目标单词和一个文本串,判断文本串中是否存在某些目标单词. 思路 赤裸裸的 AC自动机. 代码: #include<iostream> #include<cst ...
- BZOJ 3530 [SDOI2014]数数 (Trie图/AC自动机+数位DP)
题目大意:略 裸的AC自动机+数位DP吧... 定义f[i][x][0/1]表示已经匹配到了第i位,当前位置是x,0表示没到上限,1到上限,此时数是数量 然而会出现虚拟前导零,即前几位没有数字的情况, ...
- hihoCoder 1036 Trie图 AC自动机
题意:给定n个模式串和一个文本串,判断文本中是否存在模式串. 思路:套模板即可. AC代码 #include <cstdio> #include <cmath> #includ ...
- 关于Trie KMP AC自动机
个人认为trie,KMP,AC自动机是思想非常明确的,AC自动机的性质是与KMP算法的思想类似的(失配后跳转) 而KMP是线性的,AC自动机是在tire树上跑KMP,为方便那些不会用指针的小朋友(我也 ...
- 2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机)
2021.11.09 P2292 [HNOI2004]L语言(trie树+AC自动机) https://www.luogu.com.cn/problem/P2292 题意: 标点符号的出现晚于文字的出 ...
- CF1110H Modest Substrings AC自动机、DP
传送门 如果\(r-l\)比较小,可以将所有满足条件的串扔进\(AC\)自动机然后在上面DP,从前往后确定字符串的每一位. 但是\(l,r \leq 10^{800}\)就十分不可行,所以需要优化这个 ...
- HDU 3341 Lost's revenge ( Trie图 && 状压DP && 数量限制类型 )
题意 : 给出 n 个模式串,最后给出一个主串,问你主串打乱重组的情况下,最多能够包含多少个模式串. 分析 : 如果你做过类似 Trie图 || AC自动机 + DP 类似的题目的话,那么这道题相对之 ...
- 模板—trie图
做了某题之后发现trie的AC自动机太垃圾了,动不动就TLE,然后我就去学了trie图. #include<iostream> #include<cstdio> using n ...
- BZOJ 1009 GT考试(ac自动机+矩阵DP)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1009 题意:给定一个长度为m的串s.有多少种长度为n的串不包含s? 思路:(1)将s插入 ...
随机推荐
- Unity小知识点大全(一)
原帖地址:https://zhuanlan.zhihu.com/p/54763553 1. 高亮选择 在Scene面板右上角的Gizmo下拉列表中,可以通过设置Selection Outline选项决 ...
- codeforces 962F.simple cycle(tarjan/点双连通分量)
题目连接:http://codeforces.com/contest/962/problem/F 题目大意是定义一个simple cycle为从一个节点开始绕环走一遍能经过simple cycle内任 ...
- css的多级分类
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- js数组和对象
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 使用python实现冒泡、选择、插入基础排序
冒泡排序 依次比较相邻两元素,若前一元素大于后一元素则交换之,直至最后一个元素即为最大: 然后重新从首元素开始重复同样的操作,直至倒数第二个元素即为次大元素: 依次类推.如同水中的气泡,依次将最大或最 ...
- hz和s和脉冲
先弄清楚定义,HZ是频率的单位,而s是周期的单位:而f=1/T. 故1hz=1s:5hz=1/5=0.02s; 占空比 占空比(Duty Ratio)在电信领域中有如下含义: 在一串理想的 ...
- AcWing 868. 筛质数 线性筛法
#include <iostream> #include <algorithm> using namespace std; ; int primes[N], cnt; bool ...
- Layui自定义模块的使用方式
为什么要自定义模块呢?好处很多.比如可以大量重用代码...... 根据layui官方的文档说明.首先第一步是要确定你要扩展的模块名称 现在做的是登录功能.因此扩展模块名叫 login 使用layui ...
- JEECG右上角用户信息完整显示
最近在使用JEECG框架,发现一个问题,就是右上角的用户信息显示不完整(如下图所示),现在想把完整信息显示出来 首先想到的是overflow样式问题,想通过修改样式显示完整信息,通过各种删除修改也没有 ...
- Codeforces Round #579 (Div. 3) 题解
比赛链接:https://codeforc.es/contest/1203/ A. Circle of Students 题意:\(T\)组询问,每组询问给出\(n\)个数字,问这\(n\)个数字能否 ...