【BZOJ1921】【CTSC2010】珠宝商(点分治,后缀自动机)
【BZOJ1921】【CTSC2010】珠宝商(点分治,后缀自动机)
题面
洛谷
BZOJ权限题
题解
如果要我们做暴力,显然可以以某个点为根节点,然后把子树\(dfs\)一遍,建出特征串的\(SAM\),就可以直接计算出现次数了。复杂度是\(O(size^2)\)
另外一种暴力是我们枚举以某个点为中心,考虑在其两棵不同子树内各选择一条链,然后拼接在一起计算答案。我们假设选择了\(R\)为中心,然后有一条\((u\rightarrow R)\)的链,有一条\((R\rightarrow v)\)的链,我们把\((u\rightarrow R)\)这个串在每个匹配到的结尾位置打上一个标记,把\((R\rightarrow v)\)这个串在每个被匹配到的开头位置打上一个标记,于是我们就只需要把每个位置的左右两个标记乘起来就是答案了。
然后考虑怎么打这个标记,对于在开头位置打标记,显然是匹配上了一个后缀的前缀,那么我们把后缀树建出来,因为每一个后缀上的一个叶子节点对应着一个后缀,这样子我们只要在后缀树上找到这个串匹配的节点,然后其子树的所有叶子节点对应的后缀的开头位置都要\(+1\),于是子树加可以变成在后缀树上的匹配点单点加,最后一次\(dfs\)一次后缀树就好了。类似的,在结尾位置打标记就是在前缀的一段后缀打标记,那么建出前缀树就行了。于是我们就可以做到\(O(m+size)\),其中\(m\)是特征串的长度。但是这样子会出现\(R\)的相同子树里的一个从上往下的串和一个从下往上的串进行了匹配,于是我们还要对于每一个子树进行去除。
现在有了这两种复杂度不同的做法,显然我们可以按照\(B=\sqrt m\)来分类讨论,对于\(size\le B\)直接\(O(size^2)\)暴力,否则对应下面这种的\(O(m+size)\)的做法,注意对于容斥减去相同子树内的贡献的时候,也需要考虑使用两种对应的方法,否则复杂度是假的。
upd:
补一下关于复杂度的证明:
对于第一类暴力,单次是\(O(size^2)\)的,因为这样处理完之后所有子树的答案已经贡献完毕,可以直接返回,所以只需要在分治子树大小第一次小于\(B\)的时候统计答案,然后因为所有这样的子树两两不交,所以\(\sum size\)是不会超过\(n\)的,而\(\sum size^2\le \frac{n}{B}B^2=nB\),所以这一部分的复杂度是\(O(nB)\)的。
对于第二类暴力,我们考虑\(size\gt B\)的分治重心的个数,根据点分治的性质,没有子树的\(size\)会大于父亲的一半,所以每次向上至少要合并两个\(size\gt B\)的分治子树,而这样子的子树不会超过$ \frac{n}{B}\(个,所以向上合并的次数不会超过\)\frac{n}{B}$次,所以这样子的分治重心的个数不会超过\(2\frac{n}{B}\),而这样子单次复杂度是\(O(size+m)\),所以这部分的总复杂度是\(O(\frac{n}{B}m)\)。
综上\(\frac{n}{B}m=nB\),即\(B=\sqrt m\)的时候复杂度最优,为\(O((n+m)\sqrt m)\)。
代码被我咕咕咕了怎么办......
【BZOJ1921】【CTSC2010】珠宝商(点分治,后缀自动机)的更多相关文章
- [BZOJ1921] [CTSC2010]珠宝商
Description Input 第一行包含两个整数 N,M,表示城市个数及特征项链的长度. 接下来的N-1 行, 每行两个整数 x,y, 表示城市 x 与城市 y 有直接道路相连.城市由1~N进行 ...
- [CTSC2010]珠宝商 SAM+后缀树+点分治
[CTSC2010]珠宝商 不错的题目 看似无法做,n<=5e4,8s,根号算法? 暴力一: n^2,+SAM上找匹配点的right集合sz,失配了直接退出 暴力二: O(m) 统计过lca=x ...
- [BJWC2018]Border 的四种求法(后缀自动机+链分治+线段树合并)
题目描述 给一个小写字母字符串 S ,q 次询问每次给出 l,r ,求 s[l..r] 的 Border . Border: 对于给定的串 s ,最大的 i 使得 s[1..i] = s[|s|-i+ ...
- 【洛谷4482】Border的四种求法(后缀自动机_线段树合并_链分治)
这题我写了一天后交了一发就过了我好兴奋啊啊啊啊啊啊 题目 洛谷 4482 分析 这题明明可以在线做的,为什么我见到的所有题解都是离线啊 -- 什么时候有机会出一个在线版本坑人. 题目的要求可以转化为求 ...
- CTSC2010 珠宝商
珠宝商 题目描述 Louis.PS 是一名精明的珠宝商,他出售的项链构造独特,很大程度上是因为他的制作方法与众不同.每次 Louis.PS 到达某个国家后,他会选择一条路径去遍历该国的城市.在到达一个 ...
- [模板] 后缀自动机&&后缀树
后缀自动机 后缀自动机是一种确定性有限状态自动机, 它可以接收字符串\(s\)的所有后缀. 构造, 性质 翻译自毛子俄罗斯神仙的博客, 讲的很好 后缀自动机详解 - DZYO的博客 - CSDN博客 ...
- P4218 [CTSC2010]珠宝商
P4218 [CTSC2010]珠宝商 神题... 可以想到点分治,细节不写了... (学了个新姿势,sam可以在前面加字符 但是一次点分治只能做到\(O(m)\),考虑\(\sqrt n\)点分治, ...
- @bzoj - 1921@ [ctsc2010]珠宝商
目录 @description@ @solution@ @accepted code@ @details@ @description@ 简述版题意:给定字符串 S 与一棵树 T,树上每个点有一个字符. ...
- BZOJ 后缀自动机四·重复旋律7
后缀自动机四·重复旋律7 时间限制:15000ms 单点时限:3000ms 内存限制:512MB 描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一段音乐旋律可以被表示为一段数构成的数列. 神奇的 ...
随机推荐
- 【cf932E】E. Team Work(第二类斯特林数)
传送门 题意: 求\(\displaystyle \sum_{i=0}^n{n\choose i}i^k,n\leq 10^9,k\leq 5000\). 思路: 将\(i^k\)用第二类斯特林数展开 ...
- Jmeter脚本录制攻略
基于Apache JMeter(5.2.1) 首先在TestPlan里添加一个HTTP代理服务武器: 设置端口,在目标控制器里选择线程组. 在Chrome浏览器里设置代理: 点击启动按钮后,在浏览器登 ...
- IT兄弟连 HTML5教程 多媒体应用 HTML图像地图
图像地图是带有可点击区域的图像,通常情况下,每个区域是一个相关的超级链接.点击某个区域,就会到达相关的链接,也可以通过图像地图实现图片切换效果. 1 什么是图像地图 把一幅图像分成为多个区域,每个区 ...
- 【游戏开发】网络编程之浅谈TCP粘包、拆包问题及其解决方案
引子 现如今手游开发中网络编程是必不可少的重要一环,如果使用的是TCP协议的话,那么不可避免的就会遇见TCP粘包和拆包的问题,马三觉得haifeiWu博主的 TCP 粘包问题浅析及其解决方案 这篇博客 ...
- SpringBoot:CORS处理跨域请求的三种方式
一.跨域背景 1.1 何为跨域? Url的一般格式: 协议 + 域名(子域名 + 主域名) + 端口号 + 资源地址 示例: https://www.dustyblog.cn:8080/say/Hel ...
- Python 从入门到进阶之路(一)
人生苦短,我用 Python. Python 无疑是目前最火的语言之一,在这里就不再夸他的 NB 之处了,本着对计算机编程的浓厚兴趣,便开始了对 Python 的自学之路,并记录下此学习记录的心酸历程 ...
- AQS(AbstractQueuedSynchronizer)解析
AbstractQueuedSynchronizer是JUC包下的一个重要的类,JUC下的关于锁相关的类(如:ReentrantLock)等大部分是以此为基础实现的.那么我们就来分析一下AQS的原理. ...
- Spring3:spring的事务操作
三.事务操作 1.导包 2. jdbc模板与开源连接池(DBCP与C3P0) 2.1DBCP 2.2C3P0 :: 2.3.抽取配置到属性文件 定义一个属性文件 在Spring的配置文件中引入属 ...
- VUE项目中文件上传兼容IE9
项目使用VUE编写,UI是ElementUI,但是Element的Upload组件是不兼容IE9的.因为IE9中无法使用FormData. 查找资料基本有两种解决方法:1.引入JQuery和jQuer ...
- Last 2 dimensions of the array must be square
这个报错是因为我们在求解行列式的值的时候使用了: np.linalg.det(D) 但是D必须是方阵才可以进行运算,不是方阵则会报错,我们把之前的行列式更改为方阵就不会再报错了,当然这也是numpy自 ...