[BZOJ3779] 重组病毒

博客讲述了如何解决BZOJ3779问题,涉及树的染色操作和换根操作。通过将颜色数转化为虚边个数来简化问题,使用LCT(Link-Cut Tree)和dfs序线段树进行维护。文章讨论了如何处理树的Access过程和换根操作,特别是当换根时如何在线段树上进行维护,以及处理不同查询类型的方法。
摘要由CSDN通过智能技术生成

这题考了两遍 QAQAQAQ

第一遍还是我懵懂无知的时候,不知道换根怎么搞,就打的跟染色那题似的用LCT直接维护。

第二遍临近noi一个月的现在,LCT+dfs序线段树就可以了,但是手残打跪了。

题目抽象为这个模型

有一棵n个节点的树,每个节点有一个颜色,初始每个节点颜色不相同,且以节点1为根。定义每个点的权值为这个点到根的路径上不同颜色的个数。现在进行m次操作,每次操作为下列三种之一:
1、将x到当前根路径上的所有点染成一种新的颜色;
2、将x到当前根路径上的所有点染成一种新的颜色,并且把这个点设为新的根;
3、查询以x为根的子树中所有点权值的平均值。

好吧也不算抽象,其实这是另一个题目描述囧

第一步转换:任意一个点到根的路径上,相同的颜色必然是连续的一段,于是重新定义颜色数目为一个点到根的路径上虚边个数+1

于是操作一就是 Access 过程咯,就是在 Access 过程中进行虚实边切换的时候,假设一个节点 v 要接为 u 的右儿子,那么 u 的右儿子所代表的子树整体会将权值 +1,而 v 所代表的子树整体会将权值 -1。

这一步用 LCT df

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值