当前位置:网站首页>[COCI]Lampice (二分+树分治+字符串哈希)
[COCI]Lampice (二分+树分治+字符串哈希)
2022-04-23 06:21:00 【Zimba_】
题意:
给定一棵 n n n个结点的树,每个结点有一个小写字母 a — z a—z a—z。要求一条最长的简单路径,满足沿路径得到的字符串是回文串。
( 1 ≤ n ≤ 1 0 5 1\leq n \leq10^{5} 1≤n≤105)
思路:
首先要考虑的问题是,用什么方式去判断树上的一条路径是不是回文串。
这里采用的方法是字符串哈希。
举个例子,给 a — z a—z a—z每个字母都自己(我命由我不由天)设置一个哈希值,再设置一个 b a s e base base值和模数 M M M,字符串 a b b c b b a abbcbba abbcbba的哈希值就是 H ( a ) + H ( b ) × b a s e + H ( b ) × b a s e 2 + H ( c ) × b a s e 3 + … + H ( a ) × b a s e 6 ( m o d M ) H(a)+H(b)\times base+H(b)\times base^{2}+H(c)\times base^{3}+…+H(a)\times base^{6} (mod\;M) H(a)+H(b)×base+H(b)×base2+H(c)×base3+…+H(a)×base6(modM)。
那么,处理出前缀哈希值后,可以快速算出子串的哈希值。
判断一个串是不是回文串,我们只要得到从前往后的哈希值和从后往前的哈希值,比较是否相同即可。
那么多次询问某段子串是不是回文串,我们只要预处理出从前往后的哈希值前缀,和从后往前的哈希值后缀。就可以快速算出某段前往后和后往前的哈希值进行比较,来判断是否是回文串。
有了这个工具后,这题我们只要在树上预处理出哈希值,就可以通过计算判断路径是否为回文串。
现在,我们再来思考怎么求最长的回文路径。这个显然满足二分性质。所以,我们二分路径的长度,然后判断是否存在该长度的回文路径。
那么,现在就剩最后一个问题,就是怎么检验是否存在某个长度的回文路径。
我们设根为 R R R,那么路径分两种,一种是经过 R R R的,一种是不经过 R R R的。
假设我们可以 o ( n ) o(n) o(n)算出经过 R R R的情况,对于不经过 R R R的情况,路径都是在它的子树里。于是我们就可以用重心分解,也就是树分治来解决了,只要每次拿重心作为 R R R,总体复杂度就是 o ( n l o g n ) o(nlogn) o(nlogn)。
所以,我们现在最后要解决的问题就是,如何 o ( n ) o(n) o(n)检验是否存在经过树根 R R R,且长度给定的回文路径。
对于某一条经过 R R R的路径,一定是长这样子的。(题解盗图)
判断这条路径是否是回文串,我们只要判断 R R R到 C C C是回文串,并且 C C C到 A A A的串和 R R R到 C C C的串相同。
我们通过枚举把 A A A定下来,这时候 C C C也能算出来,我们判断完 R C RC RC,算出 C A CA CA,就只要看其他子树里,是否存在 R B RB RB的值和 C A CA CA相同。 我们把其他的子树的 R B RB RB值存到 s e t set set里,就可以 o ( l o g n ) o(logn) o(logn)找。
当我们用 u n o r d e r e d _ s e t unordered\_set unordered_set的时候,就变成 o ( 1 ) o(1) o(1)找了。那么复杂度就变成 o ( n ) o(n) o(n)了。
最后,总体复杂度就是 o ( n l o g 2 n ) o(nlog^{2}n) o(nlog2n)了。
代码:
咕一会儿。
版权声明
本文为[Zimba_]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_43785386/article/details/108576777
边栏推荐
- enforce fail at inline_ container. cc:222
- 免费开源充电桩物联网云平台
- 使用compressorjs压缩图片,优化功能,压缩所有格式的图片
- PyTorch 22. Pytorch common code snippet collection
- Object.create()原理,Object.create()规范,手写Object.create(),Object.create()用法
- jvm知识点汇总-持续更新
- remote: Support for password authentication was removed on August 13, 2021.
- 电力行业巡检对讲通信系统
- “泉”力以赴·同“州”共济|北峰人一直在行动
- 南方投资大厦SDC智能通信巡更管理系统
猜你喜欢
javscript获取文件真实后缀名
DMR system solution of Kaiyuan MINGTING hotel of Fengqiao University
枫桥学院开元名庭酒店DMR系统解决方案
Intelligent communication solution of Hainan Phoenix Airport
van-uploader上传图片实现过程、使用原生input实现上传图片
Jiangning hospital DMR system solution
地铁无线对讲系统
可视化常见绘图(三)面积图
华为云MVP邮件
Beifeng communication helps Zhanjiang fire brigade build PDT wireless communication system
随机推荐
Machine vision series (02) -- tensorflow2 3 + win10 + GPU installation
可视化常见问题解决方案(八)数学公式
go语言切片操作
安装tui-editor失败,快速解决方案
PyTorch 11. Regularization
Beifeng communication helps Zhanjiang fire brigade build PDT wireless communication system
Discussion on the outline of short video technology
el-table 横向滚动条固定在可视窗口底部
字节数仓实习生面试sql题
vim+ctags+cscpope开发环境搭建指南
自组网灵活补盲|北峰油气田勘测解决方案
不需要破解markdown编辑工具Typora
Solution of self Networking Wireless Communication intercom system in Beifeng oil and gas field
Us photo cloud editing helps BiliBili upgrade its experience
golang实现一个带Web界面的五险一金计算器
javscript获取文件真实后缀名
PyTorch 13. Nested functions and closures (dog head)
快速下载vscode的方法
PyTorch 19. Differences and relations of similar operations in pytorch
学习笔记6-几种深度学习卷积神经网络的总结