传送门

看着就是裸的AC自动机是不是?会T一个点
然而。。。为什么放过暴力KMP和暴力find,理论复杂度\(O(nm)\)起步啊
AC自动机加一个树上差分就好啦,对于每个字符串的查询,实际上都是在fail树上每个点到根的路径上+1
fail树建出来就没了
代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
void read(int &x) {char ch; bool ok;for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()) if(ch=='-') ok=1;for(x=0; isdigit(ch); x=x*10+ch-'0',ch=getchar()); if(ok) x=-x;
}
#define rg register
const int maxn=1e6+10;queue<int>q;
int ed[201],fail[maxn],n,rt=1,id=1,ch[maxn][26],ans,vis[maxn],pre[maxn*2],nxt[maxn*2],h[maxn],cnt;char s[201][maxn];
void add(int x,int y)
{pre[++cnt]=y,nxt[cnt]=h[x],h[x]=cnt;pre[++cnt]=x,nxt[cnt]=h[y],h[y]=cnt;
}
void insert(char *s,int d)
{int len=strlen(s+1);rt=1;for(rg int i=1;i<=len;i++){int now=s[i]-'a';if(!ch[rt][now])ch[rt][now]=++id;rt=ch[rt][now];vis[rt]++;}ed[d]=rt;
}
void bfs()
{q.push(1);while(!q.empty()){int x=q.front();q.pop();for(rg int i=0;i<26;i++){if(!ch[x][i]){ch[x][i]=fail[x]?ch[fail[x]][i]:1;continue;}int j=fail[x],z=ch[x][i];q.push(z);while(j&&!ch[j][i])j=fail[j];if(j)fail[z]=ch[j][i],add(z,ch[j][i]);else fail[z]=1,add(1,z);}}
}
void solve(int x,int fa)
{for(rg int i=h[x];i;i=nxt[i])if(pre[i]!=fa)solve(pre[i],x),vis[x]+=vis[pre[i]];
}
int main()
{read(n);for(rg int i=1;i<=n;i++)scanf("%s",s[i]+1),insert(s[i],i);bfs();solve(1,0);for(rg int i=1;i<=n;i++)printf("%d\n",vis[ed[i]]);
}

转载于:https://www.cnblogs.com/lcxer/p/10432912.html

bzoj3172:[Tjoi2013]单词相关推荐

  1. BZOJ3172 [Tjoi2013]单词 字符串 SA ST表

    原文链接http://www.cnblogs.com/zhouzhendong/p/9026543.html 题目传送门 - BZOJ3172 题意 输入$n(n\leq 200)$个字符串,保证长度 ...

  2. BZOJ3172: [Tjoi2013]单词

    [传送门:BZOJ3172] 简要题意: 给出n个单词,你可以理解为将这些单词变成一个个段落,然后求出每个单词在所有段落中出现的次数 题解(一): 刚开始不是很懂题目,结果发现将所有单词看成一篇文章, ...

  3. BZOJ3172 TJOI2013 单词

    传送门 Description 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. Input 第一个一个整数N,表示有多少个单词, ...

  4. BZOJ3172 TJOI2013 单词 AC自动机

    题意:给定N个字符串,设S为N个字符串首尾相连组成的字符串,查询每个字符串在S中出现的次数. 题解: 首先我们在构造Trie的时候,将构造过程中经过的节点的cnt全部++,此时cnt中记录该模式串被多 ...

  5. 【BZOJ3172】单词(AC自动机)

    [BZOJ3172]单词(AC自动机) 题面 Description 某人读论文,一篇论文是由许多单词组成.但他发现一个单词会在论文中出现很多次,现在想知道每个单词分别在论文中出现多少次. Input ...

  6. bzoj 3172: [Tjoi2013]单词 AC自动机

    3172: [Tjoi2013]单词 Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/pr ...

  7. fail树(bzoj 3172: [Tjoi2013]单词)

    3172: [Tjoi2013]单词 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 4223  Solved: 2051 [Submit][Stat ...

  8. 【BZOJ3172】[TJOI2013] 单词(AC自动机的小应用)

    点此看题面 大致题意: 给你NNN个单词,请你求出每一个单词在这NNN个单词中出现的次数. 相关题目 这道题应该是洛谷上一道板子题的升级版. LinkLinkLink [洛谷3796][模板]AC自动 ...

  9. 洛谷P3966 [TJOI2013]单词(后缀自动机)

    传送门 统计单词出现次数--为啥大家都是写AC自动机的嘞--明明后缀自动机也能做的说-- 统计出现次数这个就直接按长度排序然后做个dp就好,这是SAM的板子的要求啊,不提了 然后考虑怎么让所有串之间隔 ...

最新文章

  1. eclipse集成lombok
  2. ajax提交数据到后台php接收
  3. 【Android】把Linux GCC安插在Android手机上
  4. 怎么通过华为三层交换机实现VLAN间通信?
  5. 余玄相似度,TF-IDF
  6. 电热水器和插座之间的相亲故事
  7. 计算机网络应用答题卡,2013-2014学年第2学期11级计算机网络技术毕业考试试卷
  8. 全排列(去除重复)Permutations II
  9. 股票中买1、买2、买3和卖1、卖2、卖3
  10. 服务器监控页面html_Nmon实时监控并生成HTML监控报告
  11. win10禁用计算机维护,win10哪些服务可以禁用 服务哪些可以禁止启动
  12. edi系统三要素_从EDI的定义可以看出,通信网络、EDI软件及硬件、EDI数据标准化是构成EDI系统的三要素其...
  13. 【转载】20种PLC对应Modbus地址表
  14. Spring Boot项目CSRF (跨站请求伪造)攻击演示与防御
  15. 写论文和平时学习时有用的网站
  16. 电脑技巧——用键盘控制光标
  17. 将Chrome浏览器网页背景改成豆绿色
  18. goto加密php,PHP文件解密求大神思路,PHP加密后有大量goto语句
  19. 新手安装hadoop教程和个人遇到的错误及解决办法(错误:./hadoop-daemon.sh start journalnode用不了和WARNING: HADOOP_SECURE_DN_USER)
  20. localhost不能访问127.0.0.1可以访问的原因及解决方法(整理)

热门文章

  1. Elasticsearch 2.3.0 重建索引
  2. JS进阶Date format(日期格式化)
  3. 怎么对MySQL数据库操作大数据?这里有思路
  4. SQL Prompt 插件
  5. 丹麦IQ145满分全部完美解谜(zz)
  6. ROS学习笔记12(用Python写一个简单的消息发布和消息订阅)
  7. np.where使用:根据条件生成新的数组
  8. r roc曲线 语言_R语言系列6:生存分析中多重时间依赖性ROC曲线绘制 timeROC
  9. python socket send_全网最详细python中socket套接字send与sendall的区别
  10. EPERM: operation not permitted, Please run SwitchHosts