链接

bzoj不能auto

https://www.luogu.org/problemnew/show/P3426

思路

这个要求的串一定是S的前缀和S的后缀。

转化一下

建立出来fail树(fail[i]->i的树)

答案就在0和n之间的链条上,且答案在分界点上(上面全不可以,下面全可以)

这是样例的fail树



好了,我们从0到n挨着判断一下,n^2

其实满足条件就等价于我们选的这个前缀这个答案可以全部覆盖S串

就是说相邻的两个含有T的前缀串串的差<=|T|(这些串串一定在判断字符的子树内)

而且每次向下走的时候都要删除掉不是他子树内的点(因为他们不含有判定字符的前缀)

我们可以在删除的时候用链表维护子树内相邻的串的最大值

而且每个前缀只会被删一次,复杂度O(n)

错误

有点复杂度错误

bzoj不能auto、、、、

代码

#include <bits/stdc++.h>
using namespace std;
const int N=5e5+7;
int n,fail[N],head=1,vis[N],ma=1;
char s[N];
vector<int> G[N];
struct node {int las,u,nxt;}e[N];
void del(int u) {
if(vis[u]) return;
e[e[u].las].nxt=e[u].nxt;
e[e[u].nxt].las=e[u].las;
if(e[e[u].nxt].u&&e[e[u].las].u)
ma=max(ma,e[e[u].nxt].u-e[e[u].las].u);
// for(auto v:G[u]) del(v);
// for(int v=0;v<G[u].size();++v) del(v);
for(vector<int>::iterator v=G[u].begin();v!=G[u].end();++v) del(*v);
}
void dfs(int u) {
vis[u]=0;
if(u>=ma) {printf("%d\n",u);exit(0);}
del(u);
// for(auto v:G[u])if(vis[v])dfs(v);
// for(int v=0;v<G[u].size();++v) if(vis[v])dfs(v);
for(vector<int>::iterator v=G[u].begin();v!=G[u].end();++v) if(vis[*v])dfs(*v);
}
int main() {
// freopen("a.in","r",stdin);
// freopen("a.out","w",stdout);
scanf("%s",s+1);
n=strlen(s+1);
for(int i=2,p=0;i<=n;++i) {
while(p>0&&s[i]!=s[p+1]) p=fail[p];
if(s[i]==s[p+1]) p++;
fail[i]=p;
}
for(int i=1;i<=n;++i) G[fail[i]].push_back(i),cout<<fail[i]<<" "<<i<<"\n";
for(int p=n;p;p=fail[p]) vis[p]=1;
for(int i=1;i<=n;++i) e[i].las=i-1,e[i].nxt=i+1,e[i].u=i;e[n].nxt=0;
dfs(0);
return 0;
}

luogu3426 [POI2005]SZA-Template 后缀树的更多相关文章

  1. 洛谷P5284 [十二省联考2019]字符串问题 [后缀树]

    传送门 思路 设\(dp_i\)表示以\(i\)结尾的\(A\)串,能达到的最长长度. 然后发现这显然可以\(i\)往自己控制的\(k\)连边,\(k\)往能匹配的\(j\)连边,就是个最长路,只要建 ...

  2. [CTSC2010]珠宝商 SAM+后缀树+点分治

    [CTSC2010]珠宝商 不错的题目 看似无法做,n<=5e4,8s,根号算法? 暴力一: n^2,+SAM上找匹配点的right集合sz,失配了直接退出 暴力二: O(m) 统计过lca=x ...

  3. LOJ6041. 「雅礼集训 2017 Day7」事情的相似度 [后缀树,LCT]

    LOJ 思路 建出反串的后缀树,发现询问就是问一个区间的点的\(lca\)的深度最大值. 一种做法是dfs的时候从下往上合并\(endpos\)集合,发现插入一个点的时候只需要把与前驱后继的贡献算进去 ...

  4. CF gym 100962D Deep Purple [后缀树,树链剖分,线段树]

    Codeforces 思路 感觉这个离线的思路好神仙啊qwq 对于每个询问\([l,r]\)其实就是要求\(p_{max}\),使得\(lcs(s[1,p],s[1,r])>p-l\),也就是\ ...

  5. 后缀树(suffix tree)

    参考: 从前缀树谈到后缀树 后缀树 Suffix Tree-后缀树 字典树(trie树).后缀树 一.前缀树 简述:又名单词查找树,tries树,一种多路树形结构,常用来操作字符串(但不限于字符串), ...

  6. 字符串 --- KMP Eentend-Kmp 自动机 trie图 trie树 后缀树 后缀数组

    涉及到字符串的问题,无外乎这样一些算法和数据结构:自动机 KMP算法 Extend-KMP 后缀树 后缀数组 trie树 trie图及其应用.当然这些都是比较高级的数据结构和算法,而这里面最常用和最熟 ...

  7. 后缀树系列一:概念以及实现原理( the Ukkonen algorithm)

    首先说明一下后缀树系列一共会有三篇文章,本文先介绍基本概念以及如何线性时间内构件后缀树,第二篇文章会详细介绍怎么实现后缀树(包含实现代码),第三篇会着重谈一谈后缀树的应用. 本文分为三个部分, 首先介 ...

  8. 【Todo】字符串相关的各种算法,以及用到的各种数据结构,包括前缀树后缀树等各种树

    另开一文分析字符串相关的各种算法,以及用到的各种数据结构,包括前缀树后缀树等各种树. 先来一个汇总, 算法: 本文中提到的字符串匹配算法有:KMP, BM, Horspool, Sunday, BF, ...

  9. [转载]字典树(trie树)、后缀树

    (1)字典树(Trie树) Trie是个简单但实用的数据结构,通常用于实现字典查询.我们做即时响应用户输入的AJAX搜索框时,就是Trie开始.本质上,Trie是一颗存储多个字符串的树.相邻节点间的边 ...

  10. 后缀树(Suffix Tree)

          问题描述:               后缀树(Suffix Tree)   参考资料: http://www.cppblog.com/yuyang7/archive/2009/03/29 ...

随机推荐

  1. css之高度塌陷及其解决方法

    浅谈 清除浮动 的多种方式(clearfix) 1.什么是浮动 ? 是否脱离文档流? 1.普通流定位 static(默认方式) 普通流定位,又称为文档流定位,是页面元素的默认定位方式 页面中的块级元素 ...

  2. 微信小程序模拟点击出现问题解决方法

    move tools=>sensors=>Touch:Device-based 如果不行就换成Touch:force enabled,这俩个选择反复更换试试

  3. nginx配置https访问

    一.准备 环境:centos6.8 nginx:1.13.6 二.开始       首先安装依赖包: yum install -y gcc gcc-c++ autoconf automake make ...

  4. pytorch--nn.Sequential学习

    nn.SequentialA sequential container. Modules will be added to it in the order they are passed in the ...

  5. 使用jsonp请求本地json文件

    使用jsonp解决请求本地文件跨域问题 <!DOCTYPE html> <html lang="en"> <head> <meta cha ...

  6. findStr

    目录 规则 目录结构 src/main.cpp src/findstr.cpp include/findstr.h ft/TestCase.cpp ft/makefile ftbuild.sh mai ...

  7. 作业2:git使用

    作业要求来自于:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/2097 远端库地址:https://github.com/yellow ...

  8. GAN (Generative Adversarial Network)

    https://www.bilibili.com/video/av9770302/?p=15 前面说了auto-encoder,VAE可以用于生成 VAE的问题, AE的训练是让输入输出尽可能的接近, ...

  9. mysql学习【第6篇】:权限和数据库设计

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! mysql学习[第6篇]:权限和数据库设计 用户和权限管理 /* 用户和权限管理 */ ---- ...

  10. 与HTTP关系密切的三个协议:IP,TCP,DNS

    IP(网际协议): 位于网络层 通常易混淆的是“IP”和“IP地址”,单独讲“IP”是指一种协议名称 IP协议的作用是将各种数据包传送给对方.而要保证确实传送到对方那里,则需要满足各类条件. 其中两个 ...