正题

题目链接:https://www.luogu.com.cn/problem/P6257


题目大意

给出一个字典树,kkk次询问求每个节点出发到根节点的路径有多少包含前缀sis_isi​。


解题思路

我们按照所有询问串的反串构造ACACAC自动机。

那么此时如果我们用一个串SSS上去跑匹配的话,那么跑到的节点就表示该串在所有ACACAC自动机上的串拥有的最长后缀。然后其他存在的后缀一定在这个点到根的failfailfail链上。

然后我们丢一个TrieTrieTrie树上去匹配,跑到的点cnt++cnt++cnt++,之后在failfailfail树上统计子树的cntcntcnt和即可。

时间复杂度O(n∑∣s∣)O(n\sum |s|)O(n∑∣s∣)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=1e6+1;
int n,k,tot,ch[N][26],t[N][26],cnt[N],in[N],pos[N],fail[N];
char s[N];
queue<int> q;
int Insert(char *s){int l=strlen(s+1),x=0;for(int i=l;i>=1;i--){int c=s[i]-'A';if(!t[x][c])t[x][c]=++tot;x=t[x][c];}return x;
}
void Get_Fail(){for(int i=0;i<26;i++)if(t[0][i])q.push(t[0][i]);while(!q.empty()){int x=q.front();q.pop();for(int i=0;i<26;i++){if(!t[x][i])t[x][i]=t[fail[x]][i];else{fail[t[x][i]]=t[fail[x]][i];q.push(t[x][i]);}}}return;
}
void Dfs(int x,int y){cnt[y]++;for(int i=0;i<26;i++)if(ch[x][i])Dfs(ch[x][i],t[y][i]);return;
}
void Calc(){for(int i=1;i<=tot;i++)in[fail[i]]++;for(int i=0;i<=tot;i++)if(!in[i])q.push(i);while(!q.empty()){int x=q.front();q.pop();cnt[fail[x]]+=cnt[x];in[fail[x]]--;if(!in[fail[x]])q.push(fail[x]);}return;
}
int main()
{scanf("%d%d",&n,&k);for(int i=1;i<=n;i++){int x;char op[3];scanf("%s%d",op,&x);ch[x][op[0]-'A']=i;}for(int i=1;i<=k;i++){scanf("%s",s+1);pos[i]=Insert(s);}Get_Fail();Dfs(0,0);Calc();for(int i=1;i<=k;i++)printf("%d\n",cnt[pos[i]]);
}

P6257-[ICPC2019 WF]First of Her Name【AC自动机】相关推荐

  1. Aho-Corasick 多模式匹配算法(AC自动机) 的算法详解及具体实现

    多模式匹配 多模式匹配就是有多个模式串P1,P2,P3-,Pm,求出所有这些模式串在连续文本T1-.n中的所有可能出现的位置. 例如:求出模式集合{"nihao","ha ...

  2. 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组

    [BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...

  3. AC自动机算法及模板

    AC自动机算法及模板 2016-05-08 18:58 226人阅读 评论(0) 收藏 举报  分类: AC自动机(1)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 关于 ...

  4. Keywords Search AC自动机QAQ

    AC自动机,一直以来都以为是一个非常高大上的算法,其实它还真的挺高大上的. 首先来说,ac自动机的思想与kmp类似,需要自己模拟来理解. 给两个博客: http://www.cppblog.com/m ...

  5. 字符串匹配算法 -- AC自动机 基于Trie树的高效的敏感词过滤算法

    文章目录 1. 算法背景 2. AC自动机实现原理 2.1 构建失败指针 2.2 依赖失败指针过滤敏感词 3. 复杂度及完整代码 1. 算法背景 之前介绍过单模式串匹配的高效算法:BM和KMP 以及 ...

  6. 【Luogu3041】视频游戏的连击(AC自动机,动态规划)

    题面链接 题解 首先构建出AC自动机 然后在AC自动机上面跑DP 转移很显然从Trie树的节点跳到他的儿子节点 但是要注意一个问题, 在计算的时候,每一个节点加入后能够 造成的贡献 要加上他的子串的贡 ...

  7. HDU2896(AC自动机模版题)

    AC自动机模版题: 方法一:超时 #include<iostream> #include<algorithm> #include<cstring> #include ...

  8. HDU2222(AC自动机模版题)

    AC自动机是Trie树和KMP的结合物,但是其实KMP在这里体现了思想,而Trie树才是最重要的,要想学懂AC自动机,学习Trie树是必须的,这些是自己在学习AC自动机的个人看法,我也是在网上学习了大 ...

  9. AC自动机 + 概率dp + 高斯消元 --- HDU 5955 or 2016年沈阳icpc H [AC自动机 + 概率dp + 高斯消元]详解

    题目链接 题目大意: 就是有NNN个人,每个人都会猜一个长度为LLL的只包含{1,2,3,4,5,6}\{1,2,3,4,5,6\}{1,2,3,4,5,6}的序列,现在裁判开始投掷骰子,并且把每次的 ...

  10. P5357 【模板】AC自动机(二次加强版)(AC自动机建fail树dfs求模式串出现次数)

    P5357 [模板]AC自动机(二次加强版)(AC自动机建fail树dfs求模式串出现次数) 传送门 形式上,AC 自动机基于由若干模式串构成的 Trie 树,并在此之上增加了一些 fail 边:本质 ...

最新文章

  1. 希捷期望HAMR实现其营收的增长
  2. 万字长文,一篇文章带你入门Python
  3. Dell 2850 lsi raid卡使用指南
  4. android os build初始化,Android 关于android.os.Build介绍
  5. 移动磁盘此卷不包含可识别的文件系统要怎么找到数据
  6. CDN---共享单车算啥,阿里云发布共享网络黑科技PCDN,降低视频行业75%的成本
  7. 简单触发器的使用 -- 献给SQL初学者
  8. 归并排序的java代码_归并排序的原理及java代码实现
  9. 接口自动化测试框架搭建(9、自动化测试case的编写)--python+HTMLTestRunnerCN+request+unittest+mock+db
  10. chinapub matlab,MATLAB与通信仿真
  11. 完整的连接器设计手册_富士康的连接器设计手册
  12. Tornado IOStream
  13. win10 动态磁盘 linux,win10 动态磁盘 无效,win10动态磁盘不能识别
  14. 1筐鸡蛋1个1个拿 php,1个1个拿正好拿完 9个9个拿正好拿完(求答案 ? 一筐鸡蛋: 1个1个拿,正好拿完。 2个2个拿,还剩1个。)...
  15. 华光职业学院计算机专业,关于给予张庆俊等同学省高校计算机一级 考试成绩优秀奖励的通知...
  16. Adobe Flash Player 32.0.0.371 绿色特别版
  17. ADI Blackfin DSP处理器-BF533的开发详解59:DSP控制ADXL345三轴加速度传感器的应用2(含源码)
  18. 【系统之家首发】Ghost_Windows7_sp1_Ultimate_x86V2011.10.10 【OEM 通用版】Windows7旗舰版好人一个出品
  19. classloder
  20. Matplotlib Error: meta NOT subset: don‘t know howto subset; dropped

热门文章

  1. 选了combobox里的选项后没激发change事件_stata 事件分析法
  2. java 按钮设置图片_Java中如何设置带图片按钮的大小
  3. 脚本语言php是什么意思,php是什么脚本语言
  4. 实现图片打乱_疫情过后,是否打乱了你前进的脚步?面对现状,你将如何开展新的征程?...
  5. linux 核显驱动程序,支持下代核显 Intel放出Linux图形驱动
  6. 将span隐藏的函数_分类汇总函数Subtotal和Aggregate应用技巧解读
  7. xftp怎么有root权限_许多人都不懂的Linux系统里的特殊权限!!你真的了解嘛?...
  8. 关于c语言的符号常量以下叙述中正确的是,关于C语言的符号常量,以下叙述中正确的是...
  9. python怎么安装bokeh_python怎么安装bokeh
  10. leetcode674. 最长连续递增序列