bzoj 3881 [Coci2015]Divljak——LCT维护parent树链并

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3881

对 S 建 SAM ,每个 T 会让 S 的 parent 树的链并答案+1;在 T 走每一步的时候,走到的节点用 LCT access 一下,就能找到该点到 parent 根的链。

给链打标记。在 access 的过程中,如果遇到已经打过这个 T 标记的点,就停止 access 。

注意实现的时候,在判断 fa[x] 有没有标记之前要先 splay(fa[x]) 。

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ls c[cr][0]
#define rs c[cr][1]
using namespace std;
int rdn()
{int ret=0;bool fx=1;char ch=getchar();while(ch>'9'||ch<'0'){if(ch=='-')fx=0;ch=getchar();}while(ch>='0'&&ch<='9')ret=ret*10+ch-'0',ch=getchar();return fx?ret:-ret;
}
const int N=1e5+5,M=2e6+5,K=26;
int n,ps[N],tot=1,c[M][K],tc[M][K],fl[M],q[M];
int tim,dfn[M],fa[M],vl[M],tg[M],sta[M];
char s[M];
bool isrt(int x){return c[fa[x]][0]!=x&&c[fa[x]][1]!=x;}
void cz(int cr)
{if(!tg[cr])return; int w=tg[cr];tg[cr]=0;vl[ls]+=w; vl[rs]+=w;tg[ls]+=w; tg[rs]+=w;dfn[ls]=dfn[rs]=dfn[cr];///
}
void rotate(int x)
{int y=fa[x],z=fa[y],d=(x==c[y][1]);if(!isrt(y))c[z][y==c[z][1]]=x;fa[x]=z; fa[y]=x; fa[c[x][!d]]=y;c[y][d]=c[x][!d]; c[x][!d]=y;
}
void splay(int x)
{int top; sta[top=1]=x;for(int k=x;!isrt(k);k=fa[k])sta[++top]=fa[k];for(int i=top;i;i--)cz(sta[i]);for(int y=fa[x],z=fa[y];!isrt(x);rotate(x),y=fa[x],z=fa[y])if(!isrt(y))((y==c[z][0])^(x==c[y][0]))?rotate(x):rotate(y);
}
void access(int x)
{splay(x); if(dfn[x]==tim)return;int t=0;while(1){c[x][1]=t;if(!fa[x]){ tg[x]++;vl[x]++;dfn[x]=tim;return;}splay(fa[x]);//splay firstif(dfn[fa[x]]==tim){ tg[x]++;vl[x]++;dfn[x]=tim;return;}t=x; x=fa[x];}
}
void link(int x,int y){ fa[y]=x;}
int Ins()
{int cr=1,len=strlen(s+1);for(int i=1;i<=len;i++){int w=s[i]-'a';if(!tc[cr][w])tc[cr][w]=++tot;cr=tc[cr][w];}return cr;
}
void get_fl()
{int he=0,tl=0;for(int i=0,v;i<K;i++)if((v=tc[1][i])){q[++tl]=v;fl[v]=1;link(1,v);}else tc[1][i]=1;while(he<tl){int k=q[++he],pr=fl[k];for(int i=0,v;i<K;i++)if((v=tc[k][i])){ q[++tl]=v;fl[v]=tc[pr][i];link(tc[pr][i],v);}else tc[k][i]=tc[pr][i];}
}
void solve()
{tim++; int cr=1,len=strlen(s+1);for(int i=1;i<=len;i++){cr=tc[cr][s[i]-'a'];access(cr);}
}
int main()
{n=rdn();for(int i=1;i<=n;i++){ scanf("%s",s+1); ps[i]=Ins();}get_fl();int Q=rdn(),op,x;while(Q--){op=rdn();if(op==1){ scanf("%s",s+1); solve();}else{x=rdn(); x=ps[x];splay(x); printf("%d\n",vl[x]);}}return 0;
}

 

转载于:https://www.cnblogs.com/Narh/p/10804518.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/536486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

介绍一下再Apache下的Tomcat负载均衡的一些使用问题

在负载均衡技术中&#xff0c;硬件设备是比较昂贵的&#xff0c;对于负载均衡的学习者如果不是在企业中应用或者是学员中学习&#xff0c;很少有机会能碰到实际操作的训练。&#xff08;http://xz.8682222.com&#xff09;所以&#xff0c;很多朋友都会选择软件方面的设置进行研…

Java利器之UML类图详解

本文转载自https://blog.csdn.net/xiehuimx/article/details/53427452。 前言UML&#xff08;Unified Modeling Language&#xff09;中文统一建模语言&#xff0c;是一种开放的方法&#xff0c;用于说明、可视化、构建和编写一个正在开发的、面向对象的、软件密集系统的制品的…

Material Design之AppBarLayout总结

CoordinatorLayout 官方文档 CoordinatorLayout 是一个加强型的FrameLayout. CoordinatorLayout 主要用于两种场景: 作为activity最外层布局 作为协调一个或多个具有特定交互的子view的父布局 子view之间的特定协调动作&#xff0c;通过app:layout_behavior指定&#xff0c;如…

Git和GitHub快速入门

Git入门 简介 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的分布式版本控制系统。 工具 准备工具 Git下载地址&#xff1a;https://git-scm.com Git配置 配置的内容主要是&#xff1a;用户名和邮箱 git config --global --add user.name <用…

团队冲刺三

昨天我做了什么&#xff1f; 完成了登录的布局文件&#xff0c;建立数据库&#xff0c;建数据表&#xff0c;连接数据库&#xff0c;将信息存储。 遇到了什么问题&#xff1f; 数据库存储功能报错 今天打算做什么&#xff1f; 解决昨天遗留的问题。转载于:https://www.cnblogs.…

C语言进阶——全局变量

全局变量 定义在函数外面的变量是全局变量 全局变量具有全局的生存期和作用域 它们与任何函数都无关 在任何函数内部都可以使用它们 全局变量初始化 没有做初始化的全局变量会得到0值 指针会得到NULL值 只能用编译时刻已知的值来初始化全局变量 它们的初始化发生在main函数之前…

为什么我不用ViewPager或RecyclerView来做上下滑切换

上下滑切换翻页大概是这样的效果&#xff1a; 目前网上有诸多如 “仿抖音上下滑...” “仿花椒映客直播...” 之类的技术分享&#xff0c;都有讲述实现上下滑切换页面的方案&#xff0c;其中以 ViewPager 和 RecyclerView SnapHelper 两种方案为多&#xff0c;但是都有明显的缺…

web项目上之深入理解Java国际化

作者&#xff1a;https://blog.csdn.net/yangbo787827967/article/details/81124439 假设我们正在开发一个支持多国语言的Web应用程序&#xff0c;要求系统能够根据客户端的系统的语言类型返回对应的界面&#xff1a;英文的操作系统返回英文界面&#xff0c;而中文的操作系统则…

Chrome运行时性能瓶颈分析

一&#xff0c;初探&#xff0c;根据现象发现问题 chrome的performance知道很久了&#xff0c;但总是没有特别权威且跟上时代的学习资料&#xff0c;这次痛定思痛&#xff0c;直接看英文文档&#xff0c;一点点把这块啃掉&#xff0c;本笔记基于Chrome 59 step 1: 隐身模式打开…

vue-router之路由钩子(八)

路由钩子&#xff0c;即导航钩子&#xff0c;其实就是路由拦截器&#xff0c;vue-router一共有三类&#xff1a;全局钩子&#xff1a;最常用路由单独钩子组件内钩子1、全局钩子在src/router/index.js中使用&#xff0c;代码如下&#xff1a;// 定义路由配置const router new V…

java第一 ++--

大的转换小的自动转换 byte -> short -> int -> long -> float -> double l 自动类型转换 表示范围小的数据类型转换成范围大的数据类型&#xff0c;这种方式称为自动类型转换 自动类型转换格式&#xff1a; 范围大的数据类型 变量 范围小的数据类型值&#xf…

在加拿大读大学被开除了,以后该怎么办?

在加拿大读大学被开除了&#xff0c;以后该怎么办&#xff1f; 一天晚上正准备睡觉的时候&#xff0c;手机振动&#xff0c;打开一看&#xff0c;是一条微消息&#xff0c;“在加拿大读大学被开除了&#xff0c;以后该怎么办&#xff1f;”又一个留学生遇到的棘手问题。在国内上…

GO编程程序员修炼秘籍:十本经典书单

随着BAT、今日头条、京东、抖音等大型互联网公司对Go语言的大范围应用&#xff0c;带动更多互联网企业采取技术跟随战略&#xff0c;Go语言发展前景一片大好。5月20日工业和信息化部信息中心发布《2018中国区块链产业白皮书》&#xff0c;Go语言与区块链成为“数字中国”建设的…

AngularJs 冷兵器杂谈

一、指令 scope.template中的dom属性值可以直接用{{attr}}表达式取到scope中的属性attrlink中attr.$observe可以监听scope属性attr的动态变化需要改变$scope上的属性值时&#xff1a;$scope.$apply(function(){$scope.attr newValue }) 复制代码二、服务 循环依赖&#xff08;…

02-print的用法

print的常用&#xff1a; print(hello world!)print(hello,world!) # 逗号自动添加默认的分隔符&#xff1a;空格。print(hello world!) # 加号表示字符拼接。print(hello,world,sep***) # 单词间用***分隔。print(# * 20) # *号表示重复20遍。print(are you sure?, end)…

单田芳白眉大侠全320回下载

1、搜索“十方评书网”。 2、要下载那个评书家的选择那个评书家。 3、然后选择自己要下载的下载可以了。 转载于:https://blog.51cto.com/14204019/2392323

pip模块 redis、xlrd、xlutils、nnlog、requests

# import模块的实质&#xff1a;把python文件执行一遍,# 导入模块的顺序&#xff0c;1、从当前模块找&#xff0c;如果当前模块没有&#xff0c;2、就去python环境变量里面找 pip install redispip install xlrd pip install xlutilspip install nnlogpip install requests pip…

react.js基础

现在最热门的前端框架有AngularJS、React、Bootstrap等。自从接触了ReactJS&#xff0c;ReactJs的虚拟DOM&#xff08;Virtual DOM&#xff09;和组件化的开发深深的吸引了我&#xff0c;下面来跟我一起领略ReactJs的风采吧~~ 文章有点长&#xff0c;耐心读完&#xff0c;你会有…

第 11 章 日志管理 - 089 - 初探 ELK

在开源的日志管理方案中&#xff0c;最出名的莫过于 ELK 了。 ELK 是三个软件的合称&#xff1a;Elasticsearch、Logstash、Kibana。 Elasticsearch 一个近乎实时查询的全文搜索引擎。Elasticsearch 的设计目标就是要能够处理和搜索巨量的日志数据。 Logstash 读取原始日志&…

【转】Kotlin 新版来了,支持跨平台!

作者&#xff1a;Tamic 原文链接&#xff1a;juejin.im/post/5cd8f9… 谷歌在今年的 I/O 大会上宣布&#xff0c;Kotlin 编程语言现在是 Android 应用程序开发人员的首选语言(谷歌宣布 Kotlin 成为安卓开发首选)。 还有一个好消息, Kotlin 1.3.30 正式发布&#xff0c;做了对ap…