[HEOI2012]旅行问题 AC 自动机
Code:
#include <bits/stdc++.h>
#define ll long long
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
const int maxn=1000007;
const ll mod=1000000007;
queue<int>q;
vector<int>get[maxn];
ll id[maxn];
char str[maxn];
int edges,tot;
int ch[maxn][30],f[maxn],hd[maxn],to[maxn],nex[maxn],dep[maxn],top[maxn],son[maxn],siz[maxn],fa[maxn];
inline void addedge(int u,int v){ nex[++edges]=hd[u],hd[u]=edges,to[edges]=v; }
inline void insert(int idx,char ss[])
{
int x=0,len=strlen(ss+1),i;
for(i=1;i<=len;++i)
{
int c=ss[i]-'a';
if(!ch[x][c]) { ch[x][c]=++tot,id[ch[x][c]]=(1ll*26*id[x]+c)%mod; }
x=ch[x][c];
get[idx].push_back(x);
}
}
inline void getfail()
{
int i,j;
for(i=0;i<27;++i) if(ch[0][i]) addedge(0,ch[0][i]),q.push(ch[0][i]);
while(!q.empty())
{
int u=q.front();q.pop();
for(i=0;i<27;++i)
{
int p=ch[u][i];
if(!p) { ch[u][i]=ch[f[u]][i]; continue; }
f[p]=ch[f[u]][i], addedge(f[p],p);
q.push(p);
}
}
}
void dfs1(int u,int ff)
{
int i;
fa[u]=ff,siz[u]=1;
for(i=hd[u];i;i=nex[i])
{
int v=to[i];
if(v==ff) continue;
dep[v]=dep[u]+1,dfs1(v,u), siz[u]+=siz[v];
if(siz[v]>siz[son[u]]) son[u]=v;
}
}
void dfs2(int u,int tp)
{
int i;
top[u]=tp;
if(son[u]) dfs2(son[u],tp);
for(i=hd[u];i;i=nex[i])
{
int v=to[i];
if(v==fa[u]||v==son[u]) continue;
dfs2(v,v);
}
}
int LCA(int x,int y)
{
while(top[x]^top[y])
{
dep[top[x]]>dep[top[y]]?x=fa[top[x]]:y=fa[top[y]];
// printf("%d %d\n",x,y);
}
return dep[x]<dep[y]?x:y;
}
int main()
{
// setIO("input");
int n,i,j,m;
scanf("%d",&n);
for(i=1;i<=n;++i) scanf("%s",str+1),insert(i,str);
getfail(),dfs1(0,-1),dfs2(0,0);
scanf("%d",&m);
for(i=1;i<=m;++i)
{
int a,b,c,d;
scanf("%d%d%d%d",&a,&b,&c,&d);
printf("%lld\n",id[LCA(get[a][b-1], get[c][d-1])]);
}
return 0;
}
[HEOI2012]旅行问题 AC 自动机的更多相关文章
- BZOJ2746: [HEOI2012]旅行问题(AC自动机 LCA)
Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 1188 Solved: 383[Submit][Status][Discuss] Descripti ...
- bzoj 2746: [HEOI2012]旅行问题 AC自动机fail树
2746: [HEOI2012]旅行问题 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 489 Solved: 174[Submit][Status ...
- [bzoj2746][HEOI2012]旅行问题 _AC自动机_倍增
[HEOI2012]旅行问题 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2746 题解: 这个是讲课时候的题. 讲课的时候都在想怎么后 ...
- AC日记——[HEOI2012]旅行问题 bzoj 2746
2746 思路: 建立ac自动机,然后把fail树抽出来: 然后在fail树上走lca(神奇): 代码: #include <cstdio> #include <vector> ...
- BZOJ 2746: [HEOI2012]旅行问题
2746: [HEOI2012]旅行问题 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 921 Solved: 291[Submit][Status ...
- AC自动机题单
AC自动机题目 真的超级感谢xzy 真的帮到我很多 题单 [X] [luogu3808][模板]AC自动机(简单版) https://www.luogu.org/problemnew/show/P38 ...
- (RERERERERERERERERERERE) BZOJ 2746: [HEOI2012]旅行问题
二次联通门 : BZOJ 2746: [HEOI2012]旅行问题 神TM STL的vector push_back进一个数后取出时就变成了一个很小的负数.. 调不出来了, 不调了 #include ...
- 基于trie树做一个ac自动机
基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...
- AC自动机-算法详解
What's Aho-Corasick automaton? 一种多模式串匹配算法,该算法在1975年产生于贝尔实验室,是著名的多模式匹配算法之一. 简单的说,KMP用来在一篇文章中匹配一个模式串:但 ...
随机推荐
- 神经网络预测mnist时候如果不归一化,则准确率仅仅10%下文作者svm也遇到了。
转自:http://blog.csdn.net/jeryjeryjery/article/details/72649320 这两天用Python来实现手写数字识别,刚开始用原始数据进行训练,结果预测结 ...
- html 移动端关于长按图片弹出保存问题
在做html5项目的时候有个需求是要拖动一个图片,但是又不要用户长时间按着弹出保存框.首先想到的就是在点图片的时候阻止默认事件的发生: js停止冒泡· function myfn(e){ window ...
- Opencv 编译
转载 https://www.cnblogs.com/xinxue/p/5766756.html OpenCV 3.4 版本,圣诞节前发布了,该版本新增了一种去掉视频背景的算法,dnn 模块的进一步改 ...
- JavaScript学习——使用JS完成注册页面表单校验
1.步骤分析 第一步:确定事件(onsubmit)并为其绑定一个函数 第二步:书写这个函数(获取用户输入的数据<获取数据时需要在指定位置定义一个 id>) 第三步:对用户输入的数据进行判断 ...
- 记一次mysql性能优化过程
摘要: 所谓mysql的优化,三分是配置的优化,七分是sql语句的优化,通过一些案例分析,希望给大家在工作中带来一些思路 由于配置是运行过那么长时间,很稳定,基本上不考虑,所以本次主要是sql的优化, ...
- centos下nginx配置
转自 http://www.linuxidc.com/Linux/2016-09/134907.htm 安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Wi ...
- 每个IT安全专业人员应该知道的12种根本漏洞
每个IT安全专业人员应该知道的12种根本漏洞 每年,IT安全专业人员都面临着数千个新的软件漏洞和数百万个不同的恶意软件程序,但只有12种根本漏洞会让这些软件漏洞和恶意软件程序攻击你的设备.了解这些根本 ...
- 数组的常用方法 Array;
数组: 1,arr.join();//返回默认由逗号隔开的一个字符串,传参则返回所传参数隔开的一个字符串; 2,arr.push();//往数组最后添加数据,返回新的数组的length,这个方法将改变 ...
- BZOJ 3529 [Sdoi2014]数表 (莫比乌斯反演+树状数组+离线)
题目大意:有一张$n*m$的数表,第$i$行第$j$列的数是同时能整除$i,j$的所有数之和,求数表内所有不大于A的数之和 先是看错题了...接着看对题了发现不会做了...刚了大半个下午无果 看了Po ...
- Ubuntu 如何进入系统文件/etc/profile修改内容
转载:https://blog.csdn.net/cfq1491/article/details/81088117 /etc/profile 默认权限为 -rw-r--r-- 即只有root用户可以修 ...