trie图实际上是优化的一种AC自动机。

trie图是在trie树上加一些失配指针,实际上是类似KMP的一种字符串匹配算法。

失配指针类似KMP的nx数组,有效地利用了之前失配的信息,优化了时间复杂度。

比如trie树上的abc那个节点,失配后会指向bc。

所以我们需要知道上一层节点的fail指针,来求出这一层的fail指针。

那就~BFS吧~

懒得写了,大佬们讲的都比我好。

哪天有空了,可能会再详细写一写吧,补两张图什么的。

模板题:洛谷 P3808 【模板】AC自动机(简单版)

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std; int n,sz;
int s[][];
int ed[];
int fal[];
char str[]; void ins(char *a)
{
int l=strlen(a+);
int p=;
for(int i=;i<=l;i++)
{
int c=a[i]-'a'+;
if(!s[p][c])s[p][c]=++sz;
p=s[p][c];
}
ed[p]++;
} queue<int>qq; void build()
{
for(int i=;i<=;i++)
if(s[][i])qq.push(s[][i]);
while(!qq.empty())
{
int p=qq.front();
qq.pop();
for(int i=;i<=;i++)
{
if(s[p][i])fal[s[p][i]]=s[fal[p]][i],qq.push(s[p][i]);
else s[p][i]=s[fal[p]][i];
}
}
} int cal(char *a)
{
int l=strlen(a+);
int p=,ans=;
for(int i=;i<=l;i++)
{
int c=a[i]-'a'+;
p=s[p][c];
for(int j=p;j&&~ed[j];j=fal[j])
{
ans+=ed[j];
ed[j]=-;
}
}
return ans;
} int main()
{
scanf("%d",&n);
char str[];
for(int i=;i<=n;i++)
{
scanf("%s",str+);
ins(str);
}
build();
scanf("%s",str+);
int ans=cal(str);
printf("%d",ans);
return ;
}

Trie图 模板的更多相关文章

  1. 小菜鸟 菜谈 KMP->字典树->AC自动机->trie 图 (改进与不改进)

    本文的主要宗旨是总结自己看了大佬们对AC自动机和trie 图 的一些理解与看法.(前沿:本人水平有限,总结有误,希望大佬们可以指出) KMP分割线--------------------------- ...

  2. Trie图(模板)

    Trie图(蒟蒻听说AC自动机能做的题Trie图都能做,而且AC自动机可能被卡,就没学过AC自动机),最近想捡一捡,好久之前做的了. Trie图,就是一个在Trie树上建的图  大概描述一下 比如说有 ...

  3. 模板—trie图

    做了某题之后发现trie的AC自动机太垃圾了,动不动就TLE,然后我就去学了trie图. #include<iostream> #include<cstdio> using n ...

  4. 【hihoCoder 1036】Trie图

    看了一下简单的$Trie图$,调模板调啊调一连调了$2h$,最后发现$-'a'$打成$-'A'$了hhh,有种摔键盘的冲动. $Trie图$是$Trie树$上建立“前缀边”,不用再像在$Trie树$上 ...

  5. 【AC自动机&&Trie图】积累

    以前KMP和后缀系列(主要是后缀数组,后缀自动机),都刷了一定数量的题,但是对于AC自动机,却有些冷落,罪过. 但是我感觉,在蓝桥杯比赛中AC自动机出现的概率比后缀系列大,简单的会考匹配,稍难一点会考 ...

  6. POJ 2778 DNA Sequence ( AC自动机、Trie图、矩阵快速幂、DP )

    题意 : 给出一些病毒串,问你由ATGC构成的长度为 n 且不包含这些病毒串的个数有多少个 分析 : 这题搞了我真特么久啊,首先你需要知道的前置技能包括 AC自动机.构建Trie图.矩阵快速幂,其中矩 ...

  7. 【BZOJ-2938】病毒 Trie图 + 拓扑排序

    2938: [Poi2000]病毒 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 609  Solved: 318[Submit][Status][Di ...

  8. 【hihoCoder】1036 Trie图

    题目:http://hihocoder.com/problemset/problem/1036 给一个词典dict,词典中包含了一些单词words.要求判断给定的一个文本串text中是否包含这个字典中 ...

  9. HDU 1251 Trie树模板题

    1.HDU 1251 统计难题  Trie树模板题,或者map 2.总结:用C++过了,G++就爆内存.. 题意:查找给定前缀的单词数量. #include<iostream> #incl ...

随机推荐

  1. Split string every nth character?

    https://stackoverflow.com/questions/9475241/split-string-every-nth-character >>> line = '12 ...

  2. Maven--导出pom中依赖的jar包

    参考:https://my.oschina.net/cloudcoder/blog/212648 mvn dependency:copy-dependencies -DoutputDirectory= ...

  3. python-day7爬虫基础之Ajax数据爬取

    前几天一直在忙老师的项目,就没有继续学python,也没有写什么收获,今天晚上有空看看书,边看边理解着写吧: 首先说一下,我对Ajax的理解,就是有时候我们在浏览某个网页的时候,只要我们鼠标一直往下滑 ...

  4. JS导出、导入EXCEL(案例)

    插件下载地址:http://oss.sheetjs.com/js-xlsx/xlsx.full.min.js 1.导出excel <!DOCTYPE html> <html> ...

  5. keras中保存自定义层和loss

    在keras中保存模型有几种方式: (1):使用callbacks,可以保存训练中任意的模型,或选择最好的模型 logdir = './callbacks' if not os.path.exists ...

  6. pyinstaller 3.6版本通过pip安装失败的解决办法

    本机中原pyinstaller版本为3.5版本,本打算通过 pip install --upgrade pyinstaller进行升级,竟然报错,后面卸载再重新安装也一样报错,没办法看来通过pip是暂 ...

  7. Prometheus监控系统之入门篇(一)

    1. 简介 Prometheus: (简称Prom)是由SoundCloud开发的开源监控报警系统.是大名鼎鼎的CNCF云原生基金会下的第二大开源项目.具有如下特点: 使用Go语言开发 内置时序数据库 ...

  8. 蓝桥杯 sine之舞(递归)

    Description 最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功.所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们的计算能力.不妨 ...

  9. 四十三、LAMP与LNMP web架构深度优化实战-第二部

    1. 配置nginx gzip压缩功能    服务器对发出的内容进行压缩,带宽少了,体验好,速度快,但是服务端压,会使cpu使用高,压缩比高的进行压缩:文本.程序文件.数据文件.图片视频不要压缩,一般 ...

  10. php面向对象理解(一)

    常用的继承过程,以及对public.private.protected修饰符的理解: /*****************************父类************************* ...