AC自动机

拓扑排序优化,注意拓扑排序前要把所有入度为零的点都加进去

#include<bits/stdc++.h>
using namespace std;
#define maxn 1000005
#define maxm 28
struct AC
{
int trieN;
int ch[maxn][maxm];
int val[maxn];
int fail[maxn];
int ans[maxn];
int in[maxn];///用于拓扑排序
vector<int> s[maxn];
int tim[maxn];
void init()
{
trieN=-;
newnod();
}
int newnod()
{
memset(ch[++trieN],,sizeof ch[]);
val[trieN]=fail[trieN]=;
tim[trieN]=;s[trieN].clear();
return trieN;
}
void insert(const string & str,int k)
{
int cur=;
for(int i=; i<str.size(); i++)
{
int d=str[i]-'a';
if(!ch[cur][d])
{
ch[cur][d]=newnod();
}
cur=ch[cur][d];
}
val[cur]++;
s[cur].push_back(k);
}
void build()
{
queue<int> q;
for(int i=; i<maxm; i++)
{
if(ch[][i])
{
q.push(ch[][i]);
}
}
// q.push(0);
while(!q.empty())
{
int cur=q.front();
q.pop();
for(int i=; i<maxm; i++)
{
if(ch[cur][i])
{
// cout<<cur<<' '<<i<<endl;
//cout<<fail[cur]<<'\n';
fail[ch[cur][i]]=ch[fail[cur]][i];
in[fail[ch[cur][i]]]++;
//cout<<fail[ch[cur][i]]<<"INNNNN"<<'\n';
q.push(ch[cur][i]);
}
else
{
ch[cur][i]=ch[fail[cur]][i];
}
}
}
}
//vector<int>ans;
//int man=0;
void topu()
{
queue<int>q;
/*for(int i=1;i<=trieN;i++){
cout<<i<<"IN"<<in[i]<<'\n'; }*/
for(int i=;i<=trieN;i++){
if(in[i]==){
q.push(i);}}
while(!q.empty()){ int x=q.front();
//cout<<x<<" "<<ans[x]<<'\n';
q.pop();
if(val[x]){
for(int i=;i<s[x].size();i++)
tim[s[x][i]]=ans[x];
} int y=fail[x];
ans[y]+=ans[x];
in[y]--;
if(in[y]==)q.push(y);
} }
void query(const string & str)
{
int res=,cur=;
for(int i=; str[i]; i++)
{
int d=str[i]-'a';
cur=ch[cur][d];
ans[cur]++;
}
}
} ac;
//string A[maxn];
int main()
{
string s;
int n;
while(scanf("%d",&n)!=EOF)
{
ac.init();
//if(n==0)break;
for(int i=; i<n; i++)
{
cin>>s;
ac.insert(s,i);
}
ac.build();
cin>>s;
ac.query(s);
ac.topu();
for(int i=;i<n;i++){
cout<<ac.tim[i]<<'\n';
}
}
}

AC自动机再加强版的更多相关文章

  1. 洛谷P3796 - 【模板】AC自动机(加强版)

    原题链接 Description 模板题啦~ Code //[模板]AC自动机(加强版) #include <cstdio> #include <cstring> int co ...

  2. P3796 【模板】AC自动机(加强版)

    P3796 [模板]AC自动机(加强版) https://www.luogu.org/problemnew/show/P3796 题目描述 有NN个由小写字母组成的模式串以及一个文本串TT.每个模式串 ...

  3. 【题解】P3796【模板】AC自动机(加强版)

    [题解]P3796 [模板]AC自动机(加强版) 记录当前\(cnt\)是第几个"星".记录第几个串是对应着第几个星. 这里补充一点对于\(AC\)自动机的理解.可能一直有个问题我 ...

  4. 「LuoguP3796」 【模板】AC自动机(加强版)

    题目描述 有N个由小写字母组成的模式串以及一个文本串T.每个模式串可能会在文本串中出现多次.你需要找出哪些模式串在文本串T中出现的次数最多. 输入输出格式 输入格式: 输入含多组数据. 每组数据的第一 ...

  5. 洛谷P3796 【模板】AC自动机(加强版)(AC自动机)

    洛谷题目传送门 先膜一发yyb巨佬 orz 想学ac自动机的话,推荐一下yyb巨佬的博客,本蒟蒻也是从那里开始学的. 思路分析 裸的AC自动机,这里就不讲了.主要是这题太卡时了,尽管时限放的很大了.. ...

  6. luogu3808 luogu3796 AC自动机(简单版) AC自动机(加强版)

    纪念一下我一晚上写了八遍AC自动机 这是加强版的: #include <iostream> #include <cstring> #include <cstdio> ...

  7. 洛谷-P3796-【模板】AC自动机(加强版)

    题目传送门 -------------------------------------- 过年在家无聊补一下这周做的几道AC自动机的模板题 sol:AC自动机,在fail边的基础上再加一个last边, ...

  8. luogu P3796【模板】AC自动机(加强版)

    嘟嘟嘟 这个和某谷的AC自动机模板简单版差不多. 但还是要注意几点的: 1.这个是统计出现次数,而不是是否出现,所以在查询的时候加上这个节点的val后,不能把val标记为-1.那么也就可以说查询的时间 ...

  9. [洛谷3796]【模板】AC自动机(加强版)

    题目大意: 给定$n(n\leq150)$个模式串$p_i(|p_i|\le70)$和一个$t(|t|\le10^6)$,求$t$中被匹配次数最多的$p_i$. 思路: AC自动机.匹配时记录一下匹配 ...

随机推荐

  1. soot学习历程---(1)

    今天看了soot生成手册的部分内容,简单摘录一下 Scene 表示分析所处的完整环境,可以借此设置application class(用sootclass),主类(main),point-to和cal ...

  2. P1012拼数

    这是一道字符串的普及—的题. 输入几组数字,怎样组合起来才可以使最后结果最大.一开始这道题类似于那道删数问题,每次删除递增序列的最后一位,达到最小.而这个题我也是想到了贪心做法,于是想逐位判断,让在前 ...

  3. Thinkphp3.2 Redis缓存session

    Thinkphpsession缓存没有redis类库 Redis.class.php放在Library/Think/Session/Driver/下: <?php /** * +-------- ...

  4. 有序无序ul->li ol->li菜单,默认点击当前弹出下拉,再次点击收起下拉菜单

    实现这一效果利用css和js技术结合 以ul->li为例子 <!DOCTYPE html><html lang="en"><head> & ...

  5. 五、JVM — 类加载器

    回顾一下类加载过程 类加载器总结 双亲委派模型 双亲委派模型介绍 双亲委派模型实现源码分析 双亲委派模型的好处 如果我们不想要双亲委派模型怎么办? 自定义类加载器 推荐 回顾一下类加载过程 类加载过程 ...

  6. C#/Java 调用WSDL接口及方法

    一.C#利用vs里面自带的“添加web引用”功能: 1.首先需要清楚WSDL的引用地址  如:http://www.webxml.com.cn/Webservices/WeatherWebServic ...

  7. python 二分法实现

    # -*- coding: utf-8 -*- def BinarySearch(arr, key): # 记录数组的最高位和最低位 min = 0 max = len(arr) - 1 if key ...

  8. CQRS架构下的Saga流程重构

  9. 安装了vs2019 编译node-sass node-gyp 找不到编译器的解决方法

    1 新建powershell脚本文件 <# This is a workaround for "node-gyp is unable to find msbuild if VS2019 ...

  10. nginx的配置和基本参数说明

    16 117 118 119 120 121 122 123 #运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes  1;   #全局错误日 ...