博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jzoj4348 打击目标
阅读量:4641 次
发布时间:2019-06-09

本文共 2155 字,大约阅读时间需要 7 分钟。

又是被水题坑了。。。

一直想不出来看题解说要什么主席树,于是开始打离线算法

结果打到一半发现要强制在线。。No!!!

发现直接AC自动机似乎可做?树剖之后在AC自动机上跑的时候判断一下不就好了吗!连线段树都不要

让后快乐切掉,速度还可以(废话,人家N^2暴力都跑得飞快)

#pragma GCC opitmize("O3")#pragma G++ opitmize("O3")#include
#include
#include
#include
#define vs (*s-'a')#define N 100010using namespace std;struct AcAutomation{ int son[N*10][26],f[N*10],c[N*10],cnt; queue
q; vector
p[N*10]; inline void clear(){ cnt=1; } inline void insert(char* s,int pos){ int x=1,l=0; for(;*s;++s,++l) x=son[x][vs]?son[x][vs]:son[x][vs]=++cnt; c[x]=l; p[x].push_back(pos); } inline void build(){ p[1].push_back(N); sort(p[1].begin(),p[1].end()); for(int i=0;i<26;++i) if(!son[1][i]) son[1][i]=1; else q.push(son[1][i]),f[son[1][i]]=1; for(int x;!q.empty();q.pop()){ x=q.front(); p[x].push_back(N); sort(p[x].begin(),p[x].end()); for(int i=0;i<26;++i) if(!son[x][i]) son[x][i]=son[f[x]][i]; else q.push(son[x][i]),f[son[x][i]]=son[f[x]][i]; } } inline int query(char* s,int l,int r){ int ans=0; for(int x=1;*s;++s){ x=son[x][vs]; for(int j=x;j>1;j=f[j]) if(c[j]>ans && *lower_bound(p[j].begin(),p[j].end(),l)<=r) { ans=c[j]; break; } } return ans; }}AC;char s[N][12],c[N];struct edge{ int v,nt; } G[N<<1];int h[N],d[N],f[N],top[N],son[N],sz[N];int l[N],r[N],n,m,cnt=0,clk=0,T;inline void adj(int x,int y){ G[++cnt]=(edge){y,h[x]}; h[x]=cnt; G[++cnt]=(edge){x,h[y]}; h[y]=cnt;}void dfs(int x,int p){ d[x]=d[p]+1; f[x]=p; sz[x]=1; for(int v,i=h[x];i;i=G[i].nt) if(!d[v=G[i].v]){ dfs(v,x); sz[x]+=sz[v]; if(sz[son[x]]
d[top[y]]) x^=y^=x^=y; ans=max(ans,AC.query(s,l[top[y]],l[y])); } if(d[x]>d[y]) x^=y^=x^=y; return max(ans,AC.query(s,l[x],l[y]));}int main(){ scanf("%d%d",&n,&T); AC.clear(); for(int i=1;i<=n;++i) scanf("%s",s[i]); for(int x,i=2;i<=n;++i) scanf("%d",&x),adj(x,i); dfs(1,0); dgs(1,1); for(int i=1;i<=n;++i) AC.insert(s[i],l[i]); scanf("%d",&m); AC.build(); for(int x,y,ans=0;m--;){ scanf("%d%d%s",&x,&y,c); x^=ans; y^=ans; ans=gLca(x,y,c); printf("%d\n",ans); ans*=T; }}

转载于:https://www.cnblogs.com/Extended-Ash/p/9477162.html

你可能感兴趣的文章
通过取父级for循环的i来理解闭包,iife,匿名函数
查看>>
HDU 3374 String Problem
查看>>
数据集
查看>>
打印python包含汉字报SyntaxError: Non-ASCII character '\xe4' in file
查看>>
[Leetcode] unique paths ii 独特路径
查看>>
HDU 1217 Arbitrage (Floyd + SPFA判环)
查看>>
IntelliJ idea学习资源
查看>>
Django Rest Framework -解析器
查看>>
ExtJs 分组表格控件----监听
查看>>
Hibernate二级缓存配置
查看>>
LoadRunner常用术语
查看>>
关于jedis2.4以上版本的连接池配置,及工具类
查看>>
记忆讲师石伟华微信公众号2017所有文章汇总(待更新)
查看>>
mechanize (1)
查看>>
FactoryBean
查看>>
Coolite动态加载CheckboxGroup,无法在后台中获取
查看>>
如何在我们项目中利用开源的图表(js chart)
查看>>
nfs服务器工作原理
查看>>
C3P0连接池工具类使用
查看>>
SVN常用命令备注
查看>>