Atcoder DP Contest V题解(换根dp)

这是树形 dp 中的换根 dp

atcoder 题目传送门 & 洛谷题目传送门


Description

有一个 n n n 个节点的树,对一些节点染色,使得所有被染色的节点是一个连通块。求对于 1 , 2 , . . . , n 1,2,...,n 1,2,...,n 每个节点,该节点被染色的方案个数。所有答案对 M M M 取模。

  • 1 ≤ n ≤ 1 0 5 1\le n\le 10^5 1n105

  • 2 ≤ M ≤ 1 0 9 2\le M\le 10^9 2M109


Solution

换根 dp,我们需要考虑两个 dp 状态:

  • d p 1 u dp1_u dp1u 表示考虑以 u u u 为根节点的子树,染色节点 u u u 被染色的方案数。

  • d p 2 u dp2_u dp2u 表示考虑以 u u u 为根节点的子树外的节点和 u u u,节点 u u u 被染色的方案数。

转移:

对于换根 dp ,我们要用两次 dfs 转移 dp 值。

第一次 dfs 选取节点 0 为根,在这棵有根树上转移 d p 1 dp1 dp1 的值。

d p 1 u = ∏ ( d p 1 v + 1 ) dp1_u=\prod (dp1_v+1) dp1u

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值