题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2434

dfs AC自动机,走过的点权值+1,回溯的时候权值-1;走到询问的 y 串的节点,看一下此时 x 串 fail 树子树和即可。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
const int N=1e5+,K=;
int n,m,tot=,dy[N],c[N][K],tc[N][K],fa[N],fl[N];
int hd[N],xnt,to[N<<],nxt[N<<],dfn[N],ot[N],tim;
int h2[N],t2[N],nt2[N],ans[N];
int q[N],f[N]; char s[N];
void add(int x,int y)
{to[++xnt]=y;nxt[xnt]=hd[x];hd[x]=xnt;fl[y]=x;}
void get_fl()
{
int he=,tl=;
for(int i=,v;i<;i++)
if((v=c[][i]))q[++tl]=v,add(,v),tc[][i]=v;
else tc[][i]=;
while(he<tl)
{
int k=q[++he],pr=fl[k];
for(int i=,v;i<;i++)
if((v=c[k][i]))
q[++tl]=v,add(tc[pr][i],v),tc[k][i]=v;
else tc[k][i]=tc[pr][i];
}
}
void ini_dfs(int cr)
{
dfn[cr]=++tim;
for(int i=hd[cr];i;i=nxt[i])
ini_dfs(to[i]);
ot[cr]=tim;
}
void Inc(int x,int k){for(;x<=tot;x+=(x&-x))f[x]+=k;}
int qry(int x){int ret=;for(;x;x-=(x&-x))ret+=f[x];return ret;}
void dfs(int cr)
{
Inc(dfn[cr],);
for(int i=h2[cr];i;i=nt2[i])
ans[i]=qry(ot[t2[i]])-qry(dfn[t2[i]]-);
for(int i=;i<;i++)
if(c[cr][i])dfs(c[cr][i]);
Inc(dfn[cr],-);
}
int main()
{
scanf("%s",s+); n=strlen(s+);
int cr=,cnt=;
for(int i=;i<=n;i++)
{
if(s[i]>='a')
{
c[cr][s[i]-'a']=++tot;
fa[tot]=cr; cr=tot;
}
else if(s[i]=='B')cr=fa[cr];
else dy[++cnt]=cr;
}
get_fl(); ini_dfs();
m=rdn();
for(int i=;i<=m;i++)
{
int u=rdn(),v=rdn();
u=dy[u]; v=dy[v];
t2[i]=u;nt2[i]=h2[v];h2[v]=i;
}
dfs();
for(int i=;i<=m;i++)printf("%d\n",ans[i]);
return ;
}

bzoj 2434 [Noi2011]阿狸的打字机——AC自动机的更多相关文章

  1. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  2. BZOJ 2434: [Noi2011]阿狸的打字机( AC自动机 + DFS序 + 树状数组 )

    一个串a在b中出现, 那么a是b的某些前缀的后缀, 所以搞出AC自动机, 按fail反向建树, 然后查询(x, y)就是y的子树中有多少是x的前缀. 离线, 对AC自动机DFS一遍, 用dfs序+树状 ...

  3. bzoj 2434 [Noi2011]阿狸的打字机 AC自动机

    [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4001  Solved: 2198[Submit][Status][D ...

  4. BZOJ 2434: [Noi2011]阿狸的打字机 AC自动机+fail树+线段树

    Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的 ...

  5. BZOJ.2434.[NOI2011]阿狸的打字机(AC自动机 树状数组 DFS序)

    题目链接 首先不需要存储每个字符串,可以将所有输入的字符依次存进Trie树,对于每个'P',记录该串结束的位置在哪,以及当前节点对应的是第几个串(当前串即根节点到当前节点):对于'B',只需向上跳一个 ...

  6. 【BZOJ】2434: [Noi2011]阿狸的打字机 AC自动机+树状数组+DFS序

    [题意]阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的: l 输入小写 ...

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

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

  8. [NOI2011]阿狸的打字机 --- AC自动机 + 树状数组

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

  9. 【刷题】BZOJ 2434 [Noi2011]阿狸的打字机

    Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的 ...

随机推荐

  1. ORACLE--12C--创建PDB

    一,关于创建介绍 1,介绍 CDB支持多种创建PDB的技术.默认CBD会有一个PDB$SEED 创建的PDB自动包括完整数据字典,包括元数据和CDB根目录中系统提供的对象的内部链接.您必须从单个根定义 ...

  2. yield用法

    yield的__next__()和send()的用法,详见代码 def D(): n = 1 while n < 5: m = yield n print("m:",m) p ...

  3. JAVA 中 if和while的区别

    while和if本身就用法不同,一个是循环语句,一个是判断语句. if 只做判断,判断一次之后,便不会再回来了while 的话,循环,直到结果为false,才跳出来 链表的结构,要一直读下去,直到读完 ...

  4. JDBC的PreparedStatement启动事务使用批处理executeBatch()

    JDBC使用MySQL处理大数据的时候,自然而然的想到要使用批处理, 普通的执行过程是:每处理一条数据,就访问一次数据库: 而批处理是:累积到一定数量,再一次性提交到数据库,减少了与数据库的交互次数, ...

  5. div内容溢出

    前几天遇到一个问题,代码是这样一个层次: <div class="province"> <ul> <li>1</li> <li ...

  6. 一分钟学会Git操作流程

    今天整理下公司操作git 流程,尽量用最最简洁的方式整理出来,方便以后有新来的同事学习使用. 我整理的这个Git操作,基本上只需要一分钟,就可以轻松上手啦!!! 一. 拉取提交操作 1.拉取远程代码 ...

  7. Java环境搭建与配置、以及Tomcat搭建与配置

    首先配置Java jdk环境  列如:jdk1.8.0 : 1.首先windows+e打开文件管理系统,找到系统属性,点击“高级系统设置” ,再点击环境变量: 2.在系统变量里边新建:JAVA_HOM ...

  8. unity3D使用C#遍历场景内所有元素进行操作

    最近入门Unity3D,跟着教程做完了survival射击游戏,就想加一个功能,就是按一个按钮屏幕上的怪物都清空. 如图右下角所示. 我的方法是赋予所有怪物一个标签Tag,然后根据标签销毁Gameob ...

  9. Python pip windows安装

    参考页面: [1] : https://pip.pypa.io/en/latest/installing.html [2] : http://stackoverflow.com/questions/4 ...

  10. 从零开始的全栈工程师——html篇1.3

    文本.字体css样式与前期英语单词汇总 一.文本样式(text) 1.颜色:color:red; 2.文本对齐方式:text-align:left/center/right/justify; left ...