【NOIP2017提高A组模拟10.6】Biology
来源:互联网 发布:overlay网络 是什么 编辑:程序博客网 时间:2024/05/10 17:40
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
Solution
简单来说,trie+LCA 复杂详细来说
把那些字符串反着放到一个trie里,记录终点
最后答案就是询问的点的lca的深度
Code
#include<cstdio>#include<cstring>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)#define fd(i,a,b) for(int i=a;i>=b;i--)#define N 100100using namespace std;int n,ac,k,a[N],t[N*10][26],f[N*10][21],tot=0,deep[N*10];char s[N];int lca(int x,int y){ if(deep[x]<deep[y]) swap(x,y); fd(i,20,0) if(deep[f[x][i]]>=deep[y]) x=f[x][i]; fd(i,20,0) if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i]; if(x!=y) x=f[x][0]; return x;}int main(){ freopen("biology.in","r",stdin); freopen("biology.out","w",stdout); scanf("%d%d\n",&n,&ac); deep[1]=1;tot=1; fo(j,1,n) { scanf("%s\n",s+1); int x=1,m=strlen(s+1); fd(i,m,1) { if(t[x][s[i]-97]==0) { t[x][s[i]-97]=++tot,f[tot][0]=x; deep[tot]=deep[x]+1; fo(j,1,20) f[tot][j]=f[f[tot][j-1]][j-1]; } x=t[x][s[i]-97]; } a[j]=x; } for(;ac;ac--) { int hzj;scanf("%d ",&hzj); if(hzj==1) { scanf("%s\n",s+1); int x=1,m=strlen(s+1); fd(i,m,1) { if(t[x][s[i]-97]==0) { t[x][s[i]-97]=++tot,f[tot][0]=x; deep[tot]=deep[x]+1; fo(j,1,20) f[tot][j]=f[f[tot][j-1]][j-1]; } x=t[x][s[i]-97]; } a[++n]=x; } else { int m,ans=100000,y=0;scanf("%d",&m); for(;m;m--) { int x;scanf("%d",&x); ans=min(ans,deep[a[x]]-1); if(y>0) ans=min(ans,deep[lca(a[x],a[y])]-1); y=x; } printf("%d\n",ans); } }}
阅读全文
1 0
- 【NOIP2017提高A组模拟10.6】Biology
- NOIP2017提高A组模拟10.6】Biology
- JZOJ 5397. 【NOIP2017提高A组模拟10.6】Biology
- JZOJ5397. 【NOIP2017提高A组模拟10.6】Biology
- JZOJ5397. 【NOIP2017提高A组模拟10.6】Biology trie+LCA/哈希
- [JZOJ5396]【NOIP2017提高A组模拟10.6】Blocks
- 拉格朗日插值法 【NOIP2017提高A组模拟10.6】Count
- JZOJ 5395. 【NOIP2017提高A组模拟10.6】Count
- JZOJ 5395. 【NOIP2017提高A组模拟10.6】Count
- [JZOJ5395]【NOIP2017提高A组模拟10.6】Count
- JZOJ 5396. 【NOIP2017提高A组模拟10.6】Blocks
- 【JZOJ 5395】【NOIP2017提高A组模拟10.6】Count
- A【NOIP2017提高组模拟12.18】
- 【JZOJ4928】【NOIP2017提高组模拟12.18】A
- 【NOIP2017提高组模拟12.18】A
- 【JZOJ4928】【NOIP2017提高组模拟12.18】A
- 【NOIP2017提高A组模拟7.7】图
- 【NOIP2017提高A组模拟7.13】abcd
- 手动编写Servlet
- 51 nod 1378 夹克老爷的愤怒 树形dp + 贪心
- saturate_cast<>()
- qt5.5 webview无法显示百度网页等
- react-native学习之路-安装开源的tab-navigator出错return response error code:500
- 【NOIP2017提高A组模拟10.6】Biology
- [JZOJ5386]碎
- 2.3OpenCV程序计时
- lr录制脚本为空/Action为0
- vim 编辑器的使用
- Spring Boot参考教程(八)日志相关使用
- SQL Server,MySQL,Oracle三者的区别
- C++ 多线程
- JZOJ3473. 铺砖问题 (2017.10B组)