[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用来在一篇文章中匹配一个模式串:但 ...
随机推荐
- Kali linux 2016.2(Rolling)中的Exploits模块详解
简单来将,这个Exploits模块,就是针对不同的已知漏洞的利用程序. root@kali:~# msfconsole Unable to handle kernel NULL pointer der ...
- C#使用tesseract3.02识别验证码模拟登录
一.前言 使用tesseract3.02识别有验证码的网站 安装tesseract3.02 在VS nuget 搜索Tesseract即可. 二.项目结构图 三.项目主要代码 using System ...
- 【原创】websphere部署war包报错
应用程序在Tomcat上运行一切正常,但在websphere上部署时报以下错误:错误 500 处理请求时发生一个错误: /admin/upload.do 消息: WEB-INF/web.xml 详细错 ...
- ZBrush功能特性之法线贴图
ZMapper是ZBrush2.0推出的免费法线贴图插件.使用ZBrush革命性的多级别精度和新型的照明-快速光线跟踪器,ZMapper可以在几秒内产生适用于任何游戏引擎的法线贴图,不过3.5版本以后 ...
- servlet中Cookie的编码问题
a.什么是Cookie的编码问题? Cookie只能存放合法的ascii字符,如果是非asicc字符(比如中文), 需要转换成合法的ascii字符的形式. b.如何处理? ...
- div控制最小高度又自适高度
div控制最小高度又自适高度我们在用div布局的时候经常会遇到这样的一种情况:我们需要设置一个div的高度,当里面的东西超过这个高度时,让这个容器自动被撑开,也就是自适应高度.当里面的信息很少时候,我 ...
- DataTable相关操作,筛选,取前N条数据,去重复行,获取指定列数据
#region DataTable筛选,排序返回符合条件行组成的新DataTable或直接用DefaultView按条件返回 /// <summary> /// Dat ...
- anaconda安装basemap
https://blog.csdn.net/m0_37556124/article/details/80560384 basemap安装前需要先安装geos conda install geos 其次 ...
- 树上倍增求LCA
大概思想就是,节点$i$的第$2^{j}$个父节点是他第$2^{j-1}$个父亲的第$2^{j-1}$个父亲 然后可以$O(nlogn)$时间内解决…… 没了? //fa[i][j]表示i的第2^j个 ...
- GDOI2017 再次酱油记
Day 0 13:00 pm 啊...今天中午一点钟从ez出发,感觉吼有趣啊.出发前先大喊一声****,在书包里放一本党史,感觉玄学可以救命[滑稽] 15:00 pm 到达东莞,坐标:石龙名冠金凯悦大 ...