看了昀神的AC自动机,好棒啊~~~好棒啊。。。赶紧转过来了。。。。。

字典树上建失败指针什么的。

一个比较好的方法是稍微修改一下next的定义。

原来next[i][j]表示字典树中i节点的字符为j的儿子节点编号。

现在拓展一下。如果i节点没有字符为j的儿子,那么next[i][j]就是i节点沿着失败指针一直走到有字符为j的儿子的节点编号,如果没有,那么就指向根。

相当于是一个路径压缩的思想吧。这样一来,建立完自动机后,next指针就是很直接的转移关系了,不需要再特意的沿着失败指针跑啊跑的。

这种写法实现起来和用起来都很方便。

struct trie
{int next[1100][26],fail[1100],end[1100];int L,root;int newnode(){for (int i = 0;i < 26;i++)next[L][i] = -1;end[L++] = 0;return L-1;}void init(){L = 0;root = newnode();}void insert(char buf[],int val){int len = strlen(buf);int now = root;for (int i = 0;i < len;i++){if (next[now][buf[i]-'a'] == -1)next[now][buf[i]-'a'] = newnode();now = next[now][buf[i]-'a'];}end[now] += val;}void build(){queue<int> Q;for (int i = 0;i < 26;i++)if (next[root][i] == -1)next[root][i] = root;else{fail[next[root][i]] = root;Q.push(next[root][i]);}while (!Q.empty()){int now = Q.front();Q.pop();end[now] += end[fail[now]];for (int i = 0;i < 26;i++)if (next[now][i] == -1)next[now][i] = next[fail[now]][i];else{fail[next[now][i]] = next[fail[now]][i];Q.push(next[now][i]);}}}
};

【AC自动机模板】(转自木子日匀大神)相关推荐

  1. 数单词 (AC自动机模板题)

    数单词 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 为了能够顺利通过英语四六级考试,现在大家每天早上都会早起读英语. LYH本来以为自己在6月份的考试中可以通过六级, ...

  2. NYOJ 1085 数单词 (AC自动机模板题)

    数单词 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 为了能够顺利通过英语四六级考试,现在大家每天早上都会早起读英语. LYH本来以为自己在6月份的考试中可以通过六级, ...

  3. Keywords Search HDU - 2222(AC自动机模板)

    题意: 给定 n个长度不超过 50的由小写英文字母组成的单词准备查询,以及一篇文章,问:文中出现了多少个待查询的单词.多组数据. 题目: In the modern time, Search engi ...

  4. [Bzoj3940] [AC自动机,USACO 2015 February Gold] Censor [AC自动机模板题]

    AC自动机模板题(膜jcvb代码) 1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> ...

  5. HDU2222 Keywords Search(AC自动机模板)

    AC自动机是一种多模式匹配的算法.大概过程如下: 首先所有模式串构造一棵Trie树,Trie树上的每个非根结点都代表一个从根出发到该点路径的字符串. 然后每个结点都计算出其fail指针的值,这个fai ...

  6. AC自动机模板(【CJOJ1435】)

    题面 Description 对,这就是裸的AC自动机. 要求:在规定时间内统计出模版字符串在文本中出现的次数. Input 第一行:模版字符串的个数N. 第2->N+1行:N个字符串.(每个模 ...

  7. AC自动机模板(【洛谷3808】)

    题面 题目背景 这是一道简单的AC自动机模版题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 题目描述 给定n个模式串和1个文本串,求有多少个模式串 ...

  8. HDU 2222(AC自动机模板)

    AC自动机这个算法网上有很多资料,这里就不多赘述了. 当从一个字符串中查找另一个字符串,我们有快速的算法KMP. 现在的问题是要从一个字符串中查找很多字符串,或者要从多个字符串里分别查找很多字符串.A ...

  9. HDU 2222 Keywords Search (AC自动机模板题)

    一组数据: 1 3 sss sss sss sss ans:3 #include <cstdio> #include <cstdlib> #include <vector ...

  10. 关键词匹配(Ac自动机模板题)

    2772: 关键词匹配 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 10  Solved: 4 [Submit][Status][Web Board ...

最新文章

  1. BZOJ 2132 圈地计划(最小割)【BZOJ 修复工程】
  2. android 软件实现架构。
  3. mysql六:索引原理与慢查询优化
  4. 【开源项目】基于C++使用ffmpeg和QT开发播放器
  5. FreeSql (三十四)CodeFirst 迁移说明
  6. 权限 shareuser certificat Runtime.exec
  7. linux驱动程序文件,急,linux驱动程序是对的为什么生成不了.o驱动程序文件
  8. Layer success 层弹出后的成功回调方法
  9. PDF417数据容量
  10. oppo鸿蒙系统刷机包下载,oppo A11N原版系统rom固件刷机包下载20200716版卡刷包
  11. 无法在驱动器0的分区1上安装windows
  12. 非因解读 | RPPA功能蛋白组学与单细胞测序的“双向奔赴”,携手探究黑色素瘤免疫/靶向顺序联合治疗机制
  13. 小米手机刷机工具MiFlash怎么用
  14. Moneybookers API支付方式开发 步骤
  15. “我,从油漆工开始的80后,曾经靠副业的收入买车买房”
  16. 微信小程序开发常见问题总结
  17. VMware虚拟机鼠标闪烁
  18. 计算机文化基础第二次作业-简答题,中传2018年秋计算机文化基础第二次作业-简答题...
  19. Python网络爬虫与信息提取(17)—— 题库爬取与整理+下载答案
  20. recon靶机实验实战演练

热门文章

  1. 2017 ICPCECIC 北方邀请赛 H MJF wants to work (贪心)
  2. Android Bmob后端云简单使用-增删改查
  3. 怎么找计算机驱动程序不正常怎么办,网卡驱动程序不正常怎么办,教您解决电脑网卡驱动程序不正常...
  4. js怎么获取扫码枪条码_JS 如何获取扫码枪输入数据
  5. 串行通信——异步串行通信
  6. 如何获取到微信公众号的网址
  7. 盘点世界十大软件外包公司排名是哪些公司
  8. 饥荒联机云服务器_饥荒steam联机版专用服务器搭建
  9. HC05蓝牙模块AT指令与手机蓝牙控制STM32板载LED
  10. 【入门级】Hibernate环境搭建