牛客第八场 C-counting paths 树形dp计数


题目地址

题意

给你一颗树 初始点颜色全部为白色 对于每一个满足要求一的点集s f(s)的定义为先把点集内的点染黑 满足要求二的路径集合数量
要求一为两两黑点之间不能出现白色的点
要求二为将这个路径集合上所有点染红(起始不能为黑色) 染红后使得每个初始染黑的点相邻的点为红或黑色
例如样例
2
1 2
2 3
选1这个点集的话 我们可以选择 {2-2},{2-3},{2-2,3-3},{2-3,2-2},{2-3,3-3},{2-3,2-2,3-3}这六种路径集 则f({1})=6
题目要求你求出满足要求一的点集对应的f(s)之和

解法

首先我们可以确定 s确定的点 是一个连通块 因为如果有两个连通块的话 会不满足要求一
接下来反过来考虑 如果我们确定了当前的路径集合 那么满足当前路径集合的连通块数量也确定了
满足的连通块数量等于=未被染色的点数-两个端点都未被染色的边数因为每个连通块本身都是一颗树
所以我们只要统计对于每个点 不含这个点的路径集合数量 以及对于每条边 不含它的两个端点的路径集合数量即可 最终答案就是前者的和减后者的和
!!!因为对于每种确定的路径集合 如果一个点未被染色则他的贡献是1 如果一条边未被染色则他的贡献是-1!!!

转载于:https://www.cnblogs.com/Aragaki/p/9478168.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值