当前位置:网站首页>[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
边栏推荐
- Error in multi machine and multi card training
- el-select 中v-model绑定值,数据回显只显示value,不显示label
- “泉”力以赴·同“州”共济|北峰人一直在行动
- Typora操作技巧说明(一)
- Machine vision series (02) -- tensorflow2 3 + win10 + GPU installation
- 使用compressorjs压缩图片,优化功能,压缩所有格式的图片
- Statement of American photography technology suing Tianmu media for using volcanic engine infringement code
- javscript获取文件真实后缀名
- PyTorch 14. Module class
- van-uploader上传图片实现过程、使用原生input实现上传图片
猜你喜欢
随机推荐
Draw margin curve in arcface
javscript获取文件真实后缀名
Solution of self Networking Wireless Communication intercom system in Beifeng oil and gas field
PC端一次启动多个微信
Discussion on frame construction and technology selection of short video platform
浅谈BFC(块格式化上下文)
Wireless communication system for large-scale sports events
How does the public and Private Integrated walkie talkie realize cooperative work under multi-mode communication?
Take you to travel in space, and American photography technology provides comprehensive technical support for aerospace creative applet
字节数仓实习生面试sql题
启动mqbroker.cmd失败解决方法
UDP基础学习
el-select 中v-model绑定值,数据回显只显示value,不显示label
jvm知识点汇总-持续更新
可视化常见绘图(四)柱状图
在项目中的定时作用
Metro wireless intercom system
获取字符格式的当前时间
vim+ctags+cscpope开发环境搭建指南
直观理解熵









