主要参考:https://www.cnblogs.com/A-Quark/p/16435243.html
毛毛虫剖分
问题描述
毛毛虫剖分,一种由轻重链剖分(HLD)推广而成的树上结点重标号方法,支持修改 / 查询一只毛毛虫的信息,并且可以对毛毛虫的身体和足分别修改 / 查询不同信息 .
严格强于树剖,而且复杂度和树剖一样哦!
一些定义(默认在一棵树上):
- 毛毛虫:一条链和与这条链邻接的所有结点构成的集合 .
- 虫身(身体):毛毛虫的链部分 .
- 虫足(足):毛毛虫除虫身的部分 .
重标号方法
- 首先重剖求出重链 .
- DFS,若现在处理到结点 \(u\):
- 若 \(u\) 还未被标号,则为其标号 .
- 若 \(u\) 是重链头,遍历这条重链,将邻接这条链的结点依次标号 .
- 先递归重儿子,再递归轻儿子 .
重标号性质
- 对于重链,除链头外的结点标号连续 .
- 对于任意结点,其轻儿子标号连续 .
- 对于以重链头为根的子树,与这条重链邻接的所有结点标号连续 .
这样就可以随便维护毛毛虫信息了,顺便还能维护链信息,子树信息等 .
时间复杂度同轻重链剖分 .
例题
NOI2021 轻重边
\[\Huge 以后再写 \]一棵 \(n\) 个点的树,\(m\) 次操作:
- 对一条毛毛虫身体染黑色,足部染白色 .
- 查询一条链上的黑边数量 .
\(n,m\le 10^5\) .
标签:标号,结点,剖分,毛毛虫,重链,轻重 来源: https://www.cnblogs.com/CDOI-24374/p/16440764.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。