2020牛客暑期多校训练营Operating on the Tree(树形DP,组合数学)

本文详细解析了一道关于树形动态规划的题目,涉及树的染色操作和操作序列的成功计数。通过对不同操作序列的分析,引入树形DP的概念,并通过一个简单的例子解释了如何利用父节点的状态来传递子节点的状态,定义了dp数组的含义以及状态转移方程。同时,作者分享了在编写代码过程中遇到的问题和解决思路。
摘要由CSDN通过智能技术生成

Operating on the Tree

题目描述

在这里插入图片描述

输入描述:

在这里插入图片描述

输出描述:

在这里插入图片描述

示例1

输入

3
4
0 1 2
4
0 1 1
2
0

输出

48
60
2

说明

在这里插入图片描述

题目大意

这道题是从同一场的G题改过来的(顺手骗一下访问量,G题题解),给定一棵树。每个节点会有不同的颜色(即1 ~ n),然后又是很玄幻的建边。现有一个操作序列 p p p,按其顺序对树进行颜色的扩张染色(具体可以看上面G题题解里有详细的简绍),如果对于 p i p_i pi,在当前的树上能找到这种颜色并染色,那么我们称这个操作是成功的,否则是失败的。
要求你对于 p { 1 , 2 , . . . , n } p\{1,2,...,n\} p{ 1,2,...,n}的每种排列,都求出每个操作序列里成功的操作数,并求和输出。

分析

嗯……题目有点绕,让我们找个简单的例子来试试。
在这里插入图片描述
嗯,这个够简单了吧。首先我们拿一个序列来试水:
p = { 1 , 2 , 3 } p=\{1,2,3\} p={ 1,2,3},那么一次操作后,1把它周围的点全部染成了1,此时1是成功的,对于2,3的操作是失败的。所以 p = { 1 , 2 , 3 } p=\{1,2,3\} p={ 1,2,3}的答案是1。
同样的,若 p = { 2 , 1 , 3 } p=\{2,1,3\} p={ 2,1,3},那么答案是2,因为2和3均可以做到染色。

一下列出所有的 p p p
{ 1 , 2 , 3 } = 1 \{1,2,3\}=1 { 1,2,3}=1 \qquad { 1 , 3 , 2 } = 1 \{1,3,2\}=1 { 1,3,2}=1 \qquad { 2 , 1 , 3 } = 2 \{2,1,3\}=2 { 2,1,3}=2
{ 2 , 3 , 1 } = 2 \{2,3,1\}=2 { 2,3,1}=2 \qquad {

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值