小x与树 题解

23 篇文章 0 订阅
9 篇文章 0 订阅

x x x与树 题解

题目大意:

有一棵树,每个结点上有一个颜色。现在要求以 b b b为根的子树中有多少种颜色。

子任务 1 1 1

子任务 1 1 1的树是一条链,我们可以直接递归和桶来过这道题。

子任务 2 2 2

子任务 2 2 2 n = m n=m n=m且所有结点的颜色不同。其实可以转化为:求以 b b b为根的子树中有多少个结点。
这个就是一个树型动规的问题,我们假设 f i f_i fi表示以 i i i为根的子树中有多少个结点。
f i = ∑ j ∈ s o n i f j + 1 f_i=\sum_{j\in son_i}{f_j}+1 fi=jsonifj+1
上面的式子表示以 i i i结点为根的子树的结点个数等于它的所有儿子结点的个数的和再加 1 1 1(它本身)。

子任务 3 3 3

可以暴力来做,时间复杂度为 O ( n q ) O(nq) O(nq)

子任务 4 4 4

也是用树型动规。设 f i , j f_{i,j} fi,j表示以 i i i为根的子树中有颜色 j j j的结点个数。则
f i , j = ∑ k ∈ s o n i f k , j ( j ≠ a i ) f_{i,j}=\sum_{k\in son_i}{f_{k,j}}(j\not=a_i) fi,j=ksonifk,j(j=ai)
f i , a i = ∑ j ∈ s o n i f j , a i + 1 f_{i,a_i}=\sum_{j\in son_i}{f_{j,a_i}}+1 fi,ai=jsonifj,ai+1
上面的式子表示以 i i i为结点的子树中有 j j j颜色的个数等于它的儿子有颜色 j j j的个数的和。如果 j = a i j=a_i j=ai,那么就还要加上 1 1 1
那么我们就可以用 O ( n m ) O(nm) O(nm)的时间卡过这题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值