码迷,mamicode.com
首页 > 其他好文 > 详细

6444. 【GDOI2020模拟01.18】树高

时间:2020-01-28 20:59:31      阅读:63      评论:0      收藏:0      [点我收藏+]

标签:思路   个性   https   ref   模拟   信息   math   接下来   show   

题目

正解

这题也不是给人写出来的……
先不要考虑操作二。
有一种比较新奇的思路:将点的颜色挂在边上,然后搞出个边的连通块。
这些连通块的维护是很舒服的,直接上数据结构即可。
考虑边的连通块和点的连通块的关系。
假如有\(x\)\(y\)\(z\)三个点相连,\(x\)\(y\)父亲,\(y\)\(z\)父亲。
\((x,y)\)\((y,z)\)的颜色相同,意味着\(y\)\(z\)的颜色相同。
推广一下,我们可以发现,对于一个边连通块而言,除了根节点(需要特判是不是整棵树的根节点),其它的点的颜色都相同。
既然这个性质这么优美,操作一和操作三就可以轻松解决了。

接下来考虑操作二。
发现这题似乎没有必要用LCT,因为LCT注重维护链上的东西,而这题不需要。这题也没有必要换根。所以用ETT更加简洁一些。
考虑将一个连通块变色之后的影响。最主要的是,我们要判断变色之后,有哪些原来跟它相连的连通块可以和它合并。
假如我们能够暴力地将这些连通块一个个找出来,然后连在一起。势能分析得到,连接的次数是\(O(n)\)级别的。
为了找到这些连通块,就要能够精准打击,每次找都会有结果。ETT的splay上对于一棵子树维护信息:对于每种颜色,是否有别的连通块连向区间内的点的边是这个颜色。同时,也对每棵点记录连向它的每种颜色的边分别有哪些。
乱搞即可……

总结

还是没代码啊……
将点权变成边权,这个套路很新颖,似乎在许多地方可以用得上。

6444. 【GDOI2020模拟01.18】树高

标签:思路   个性   https   ref   模拟   信息   math   接下来   show   

原文地址:https://www.cnblogs.com/jz-597/p/12238845.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!