P2664 树上游戏(点分治/计数题计算贡献/树上差分)

博客探讨了P2664树上游戏的解题策略,主要涉及点分治方法和树上差分技术。在n个点的树上,每个点有不同的颜色,目标是计算每个点到其他点路径上的不同颜色数量之和。文章解释了如何通过首次出现颜色的贡献和子树内颜色的统计来求解,并提出了一个O(n)时间复杂度的优化方法。
摘要由CSDN通过智能技术生成

P2664 树上游戏

对于树上n个点,每个点有不同颜色,求解每个点到其他点的路径上不同颜色个数之和。

首先看到这种树上点对问题,我们可以想到点分治,然后考虑每次分治如何求解答案,本质上就是一个数颜色的问题,然后我们采用类似的思路,考虑每个颜色第一次出现时的贡献,但是现在的问题就在于一条链是没有前后的,所以我们可能需要一些计算。

首先对于分治中心的贡献计算,我们可以从中心开始dfs,在每个颜色第一次出现的地方有size的贡献。

然后考虑每个子树内部的点,对于在从当前点到分治中心的链上出现过的颜色,我们直接将其统计为 c n t ( s i z r t − s i z x ) cnt(siz_{rt}-siz_{x}) cnt(sizrtsizx)然后考虑没有在这一段出现的颜色,那就是之前一开始在其他子树内部出现的贡献,但是要减去在当前这条链上已经出现的颜色贡献和当前所在子树内部的颜色贡

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值