6444. 【GDOI2020模拟01.18】树高

题目

正解

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

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

总结

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值