Description

Input

Output

Sample Input

5 5
zzj
pri
prime
ime
owaski
2 3 1 3 5
2 2 2 3
1 actri
2 2 3 4
2 3 2 6 5

Sample Output

0
0
3
1

Data Constraint

Hint

zzj,prime,owaski三种基因片段的最长共有有效片段为空
pri,prime两种基因片段的最长共有效片段为空
添加基因片段actri,编号为6
prime,ime两种基因片段的最长共有有效片段为ime
pri,actri,owaski三种基因片段的最长共有有效片段i

Solution

  • 这题是 Trie+LcaTrie+Lca 的经典题。

  • 对于加入的每个字符串,倒序放入一个 TrieTrie 中,记录其最终节点、深度、倍增ST表等信息。

  • 那么对于查询的那几个串,只需求出它们在 TrieTrie 上的 LcaLca 即可,答案即为 LcaLca 深度。

  • 时间复杂度 O(M∗T∗log Len)O(M*T*log\ Len) 。

Code

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=1e5+2,M=N*10;
int len,tot;
int s[M],w[N],p[N],g[M][26];
int f[M][20],dep[M],a[10];
inline int read()
{int X=0,w=1; char ch=0;while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w;
}
inline int write(int x)
{if(x>9) write(x/10);putchar(x%10+'0');
}
inline void insert(int x)
{char ch=getchar();while(ch<'a' || ch>'z') ch=getchar();while(ch>='a' && ch<='z') s[++len]=ch-'a',ch=getchar();w[x+1]=len+1;
}
inline void trie(int x)
{int num=0;for(int i=w[x+1]-1;i>=w[x];i--){if(!g[num][s[i]]){g[num][s[i]]=++tot;dep[tot]=dep[num]+1;f[tot][0]=num;for(int j=1;j<20;j++) f[tot][j]=f[f[tot][j-1]][j-1];}num=g[num][s[i]];}p[x]=num;
}
inline int lca(int x,int y)
{if(dep[x]<dep[y]) swap(x,y);for(int i=log2(dep[x]);i>=0;i--)if(dep[f[x][i]]>=dep[y]) x=f[x][i];if(x==y) return x;for(int i=log2(dep[x]);i>=0;i--)if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];return f[x][0];
}
int main()
{int n=read(),m=read();for(int i=w[1]=1;i<=n;i++){insert(i);trie(i);}while(m--){int op=read();if(op==1){insert(++n);trie(n);}else{int t=read();for(int i=0;i<t;i++) a[i]=read();sort(a,a+t);t=unique(a,a+t)-a;int ans=p[a[0]];for(int i=1;i<t;i++) ans=lca(ans,p[a[i]]);write(dep[ans]),putchar('\n');}}return 0;
}

JZOJ 5397. 【NOIP2017提高A组模拟10.6】Biology相关推荐

  1. JZOJ 5404. 【NOIP2017提高A组模拟10.10】Graph

    Description 给定一张n个点m条边的无向图,每条边连接两个顶点,保证无重边自环,不保证连通 你想在这张图上进行若干次旅游,每次旅游可以任选一个点x作为起点,再走到一个与x 直接有边相连的点y ...

  2. JZOJ 5401. 【NOIP2017提高A组模拟10.8】Star Way To Heaven

    Description Input Output Sample Input 10 5 2 1 1 2 3 Sample Output 1.11803399 Data Constraint Soluti ...

  3. JZOJ 5400. 【NOIP2017提高A组模拟10.7】Repulsed

    Description 小w 心里的火焰就要被熄灭了. 简便起见,假设小w 的内心是一棵n -1 条边,n 个节点的树. 现在你要在每个节点里放一些个灭火器,每个节点可以放任意多个. 接下来每个节点都 ...

  4. JZOJ 5398. 【NOIP2017提高A组模拟10.7】Adore

    Description 小w 偶然间见到了一个DAG. 这个DAG 有m 层,第一层只有一个源点,最后一层只有一个汇点,剩下的每一层都有k 个节点. 现在小w 每次可以取反第i(1 < i &l ...

  5. JZOJ 5399. 【NOIP2017提高A组模拟10.7】Confess

    Description 小w 隐藏的心绪已经难以再隐藏下去了. 小w 有n + 1(保证n 为偶数) 个心绪,每个都包含了[1,2n] 的一个大小为n 的子集. 现在他要找到隐藏的任意两个心绪,使得他 ...

  6. JZOJ 5396. 【NOIP2017提高A组模拟10.6】Blocks

    Description Input Output Sample Input 10 5 1 7 9 9 5 9 3 4 5 8 5 7 20 9 1 Sample Output 10 6 0 2 10 ...

  7. JZOJ 5392. 【NOIP2017提高A组模拟10.5】Lucky Transformation

    Description Input Output Sample Input 7 2 2343223 4 1 2234 Sample Output 2243233 2334 Data Constrain ...

  8. 【JZOJ 5405】【NOIP2017提高A组模拟10.10】Permutation

    Description 你有一个长度为n 的排列P 与一个正整数K 你可以进行如下操作若干次使得排列的字典序尽量小 对于两个满足|i-j|>=K 且|Pi-Pj| = 1 的下标i 与j,交换P ...

  9. JZOJ 5402. 【NOIP2017提高A组模拟10.8】God Knows

    Description Input Output Sample Input 5 3 1 4 5 2 3 4 3 4 1 Sample Output 5 Data Constraint Solution ...

最新文章

  1. 【建站系列教程】2.2、fiddler手机抓包教程
  2. 河北科技创新平台年报系统 - 头脑风暴会
  3. java中wmi的username_有没有一种方法可以在Java中使用WMI类
  4. 数字图像处理--图像颜色
  5. arcgis制作瓦片地图_挖掘Dark Sky Maps(热的要死后,疯传的一个气温地图网站)...
  6. mui框架 页面无法滚动解决方法
  7. 【HTML】【简易电子相册】overflow:hidden;
  8. SSM物流管理系统(SSM毕业设计)
  9. 数据分析36计(27):分析师与用户研究员,玩转定量研究和定性研究,落地研究结论...
  10. android模拟器安装frida
  11. KeilC51基础 利用仿真测试代码的运行时间
  12. 对接app 微信登录,QQ登录流程(php)
  13. 使用开源人脸特征提取器进行脸部颜值评分
  14. 【算法】滴滴-2021校招在线笔试0913 X星文
  15. 智能硬件成在线教育救命稻草?
  16. 中文自动文本摘要生成指标计算,Rouge/Bleu/BertScore/QA代码实现
  17. 阿里企业邮箱526 Authentication failure
  18. 应用“Cain Abel”实现DNS欺骗
  19. 深圳多区发布小一初一学位政策-查查吧深圳学区房地图
  20. iPhone12无法连接电脑的热点

热门文章

  1. 双向链表实现电话簿C++代码实现
  2. 语音信号处理MATLAB实现
  3. Python学习笔记:入门(1)
  4. android实现背景音乐播放
  5. GPU(CUDA)学习日记(九)------ CUDA存储器模型
  6. tensorflow安装教程 win10环境
  7. C++读取txt中数据的两种方法
  8. 二十三、“为天下人谋幸福,才是真正的大事。”(2021.7.9)
  9. python dataframe loc函数_python pandas.DataFrame.loc函数使用详解
  10. C宏定义中的##,#,#@用法介绍