题目描述

输入描述:

输出描述:

示例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 { 3 , 1 , 2 } = 2 \{3,1,2\}=2 {
3,1,2}=2 \qquad { 3 , 2 , 1 } = 2 \{3,2,1\}=2 {
3,2,1}

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

被折叠的 条评论
为什么被折叠?



