作者:holy190 | 来源:互联网 | 2024-12-14 13:06
题目概述:给定一棵带颜色节点的树,目标是找到一种方法,通过删除某些边使得每个连通分量内的节点颜色相同。需要计算出所有可能的合法边集的数量。使用动态规划的方法,特别是树形DP来解决问题。
题目要求:给定一棵树,每个节点都有一个颜色,目标是通过删除某些边,使每个连通分量内的节点颜色相同。任务是计算所有可能的合法边集的数量。
定义 $f[x][0/1]$ 表示在子树 $x$ 中,是否还存在与节点 $x$ 颜色相同的连通部分。其中 $f[x][1]$ 表示存在这样的连通部分,而 $f[x][0]$ 则表示不存在。
对于每种颜色,一旦确定了一个连通块,这个连通块内部就不能再被分割,因此状态转移方程如下:
$$f[x][1] = \prod (f[y][0] + f[y][1]), \quad f[x][0] = 0$$
如果可以分割的部分仅限于不同颜色连通块之间的无色节点,则状态转移方程为:
$$f[x][0] = \prod (f[y][0] + f[y][1]), \quad f[x][1] = \sum\limits_y (f[y][1]\prod\limits_{z \neq y}(f[z][0] + f[z][1]))$$
#include
#include
#include
#include
#include