BZOJ 3172 [Tjoi2013]单词
来源:互联网 发布:java迭代器遍历位置 编辑:程序博客网 时间:2024/04/29 01:59
大概是fail树的一道裸应用,首先要注意fail指针的特点,即对于每个trie树上节点fail指针指向的节点与根节点形成的串一定是该节点与根节点之间形成的串的最长后缀,而判断一个串在树上总共出现了几次,其数目等于end指针被fail指针指向或间接指向的个数,即统计fail树上关于每个串end节点的子树中有多少元素,由此建立fail数跑一下节点size即可。
#include<iostream>#include<cstring>#include<cstdio>#include<queue>#include<cstdlib>#include<algorithm> using namespace std; const int maxn=1001000;const int maxm=205; int n,cnt;char s[maxn];int head[maxn],fail[maxn],num[maxn],pos[maxm],next[maxn][27]; struct edge{ int to,next;}e[maxn]; void insert(int a,int b){ e[++cnt].to=b;e[cnt].next=head[a];head[a]=cnt;}struct node{ void trie(int x) { scanf("%s",s+1); int len=strlen(s+1); int now=0; for(int i=1;i<=len;i++) { if(!next[now][s[i]-'a'])next[now][s[i]-'a']=++cnt; now=next[now][s[i]-'a']; num[now]++; } pos[x]=now; } void getfail() { queue<int>q; for(int i=0;i<26;i++)if(next[0][i]) q.push(next[0][i]),insert(0,next[0][i]); while(!q.empty()) { int u=q.front(); q.pop(); for(int i=0;i<26;i++)if(next[u][i]) { int v=fail[u]; while(v&&!next[v][i])v=fail[v]; fail[next[u][i]]=next[v][i]; insert(next[v][i],next[u][i]); q.push(next[u][i]); } } }}acm;void dfs(int x){ for(int i=head[x];i;i=e[i].next) { dfs(e[i].to); num[x]+=num[e[i].to]; }}int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) acm.trie(i); acm.getfail(); dfs(0); for(int i=1;i<=n;i++) printf("%d\n",num[pos[i]]);}
阅读全文
0 0
- 【BZOJ 3172】 [Tjoi2013]单词
- bzoj 3172: [Tjoi2013]单词
- BZOJ 3172 【Tjoi2013】单词
- bzoj 3172 [Tjoi2013]单词
- BZOJ 3172 [Tjoi2013]单词
- BZOJ 3172 Tjoi2013 单词 后缀数组
- BZOJ 3172 Tjoi2013 单词 fail树
- BZOJ 3172: [Tjoi2013]单词|后缀数组
- BZOJ 3172 [Tjoi2013] 单词 [AC自动机模板]
- bzoj 3172 [Tjoi2013]单词 后缀自动机
- BZOJ 3172: [Tjoi2013]单词(fail树)
- 【BZOJ 3172】[Tjoi2013]单词 Ac自动机
- BZOJ 3172 [Tjoi2013] 单词 Fail树
- [BZOJ 3172][Tjoi2013]单词(AC自动机)
- Bzoj 3172: [Tjoi2013]单词(fail树)
- [BZOJ]3172: [Tjoi2013]单词 AC自动机
- fail树(bzoj 3172: [Tjoi2013]单词)
- bzoj P3172 [Tjoi2013]单词
- 【第二篇】 搞定BootstrapTable(后端使用SpringMVC+Hibernate)
- IEEE发布2017年编程语言排行榜:Python高居首位,PHP第八
- 牛客 题库 小端模式
- 卡特兰数--出栈队列(解法收集和总结)
- Mac Centos7-Zookeeper 第二天(集群模式)
- BZOJ 3172 [Tjoi2013]单词
- p1179数字统计
- 最后一战源码分析_所有文章的目录
- LintCode 生成括号
- 文件和目录
- MySql数据库导出(备份)
- Linux下使用Nginx+Tomcat集群
- 从Kaminario谈谈“三大”存储热点技术
- JZOJ5350. 【NOIP2017提高A组模拟9.7】陶陶摘苹果