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 自动机的更多相关文章

  1. BZOJ2746: [HEOI2012]旅行问题(AC自动机 LCA)

    Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 1188  Solved: 383[Submit][Status][Discuss] Descripti ...

  2. bzoj 2746: [HEOI2012]旅行问题 AC自动机fail树

    2746: [HEOI2012]旅行问题 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 489  Solved: 174[Submit][Status ...

  3. [bzoj2746][HEOI2012]旅行问题 _AC自动机_倍增

    [HEOI2012]旅行问题 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2746 题解: 这个是讲课时候的题. 讲课的时候都在想怎么后 ...

  4. AC日记——[HEOI2012]旅行问题 bzoj 2746

    2746 思路: 建立ac自动机,然后把fail树抽出来: 然后在fail树上走lca(神奇): 代码: #include <cstdio> #include <vector> ...

  5. BZOJ 2746: [HEOI2012]旅行问题

    2746: [HEOI2012]旅行问题 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 921  Solved: 291[Submit][Status ...

  6. AC自动机题单

    AC自动机题目 真的超级感谢xzy 真的帮到我很多 题单 [X] [luogu3808][模板]AC自动机(简单版) https://www.luogu.org/problemnew/show/P38 ...

  7. (RERERERERERERERERERERE) BZOJ 2746: [HEOI2012]旅行问题

    二次联通门 : BZOJ 2746: [HEOI2012]旅行问题 神TM STL的vector push_back进一个数后取出时就变成了一个很小的负数.. 调不出来了, 不调了 #include ...

  8. 基于trie树做一个ac自动机

    基于trie树做一个ac自动机 #!/usr/bin/python # -*- coding: utf-8 -*- class Node: def __init__(self): self.value ...

  9. AC自动机-算法详解

    What's Aho-Corasick automaton? 一种多模式串匹配算法,该算法在1975年产生于贝尔实验室,是著名的多模式匹配算法之一. 简单的说,KMP用来在一篇文章中匹配一个模式串:但 ...

随机推荐

  1. 使用LSTM做电影评论负面检测——使用朴素贝叶斯才51%,但是使用LSTM可以达到99%准确度

    基本思路: 每个评论取前200个单词.然后生成词汇表,利用词汇index标注评论(对 每条评论的前200个单词编号而已),然后使用LSTM做正负评论检测. 代码解读见[[[评论]]]!embeddin ...

  2. 用exp命令按用户导出的DMP文件缺少表,某些表是空表

    1.用以下这句查找空表并生成执行命令 select 'alter table '||table_name||' allocate extent;' from user_tables where num ...

  3. DB-MySQL:MySQL 函数

    ylbtech-DB-MySQL:MySQL 函数 1. MySQL 字符串函数返回顶部 1. MySQL 字符串函数 函数 描述 实例 ASCII(s) 返回字符串 s 的第一个字符的 ASCII ...

  4. 固比固布局 圣杯布局 css实现传统手机app布局

    手机app的布局大致上都是头部.内容.底部三部分: 我们需要实现的是头部.底部高度固定:中间内容区域自适应且可以滚动:直接贴代码: css: html,body { width: 100%; heig ...

  5. JavaScript中Math常用方法

    title: JavaScript中Math常用方法 toc: false date: 2018-10-13 12:19:31 Math.E --2.718281828459045,算数常量e Mat ...

  6. 循环访问 TreeView 控件的所有节点

    创建测试每个节点的递归过程 . private void PrintRecursive(TreeNode treeNode) { // Print the node. System.Diagnosti ...

  7. POJ 2431 Expedition (priority_queue或者multiset可解)

    Expedition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18655   Accepted: 5405 Descr ...

  8. Golang环境配置Centos

      1.下载go程序包( go1.7rc1.linux-amd64.tar.gz)(http://www.golangtc.com/static/go/1.7rc1/go1.7rc1.linux-am ...

  9. nginx的rewrite规则

    301跳转: server { listen 80; server_name www.xiaofan.com; return 301 https://$server_name$request_uri; ...

  10. js产生随机数的几个方法

    1.Math.random(); 结果为0-1间的一个随机数(包括0,不包括1) 2.Math.floor(num); 参数num为一个数值,函数结果为num的整数部分. 3.Math.round(n ...