首页 > 试题广场 >

多彩的树

[编程题]多彩的树
  • 热度指数:2 时间限制:C/C++ 5秒,其他语言10秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
有一棵树包含 N 个节点,节点编号从 1 到 N。节点总共有 K 种颜色,颜色编号从 1 到 K。第 i 个节点的颜色为 Ai
Fi 表示恰好包含 i 种颜色的路径数量。请计算:

输入描述:
第一行输入两个正整数 N 和 K,N 表示节点个数,K 表示颜色种类数量。
第二行输入 N 个正整数,A1, A2, A3, ... ..., AN,Ai 表示第 i 个节点的颜色。
接下来 N - 1 行,第 i 行输入两个正整数 Ui 和 Vi,表示节点 Ui 和节点 Vi 之间存在一条无向边,数据保证这 N-1 条边连通了 N 个节点。
1 ≤ N ≤ 50000.
1 ≤ K ≤ 10.
1 ≤ Ai ≤ K.


输出描述:
输出一个整数表示答案。
示例1

输入

5 3
1 2 1 2 3
4 2
1 3
2 1
2 5

输出

4600065
头像 sunrise__sunrise
发表于 2020-05-08 09:24:45
A、多彩的树 看到颜色最大只有10种,考虑枚举全部的颜色搭配,二进制枚举即可 我们选取二进制位是1的表示该颜色本轮被选取。例如1011->第一种第二种第四种颜色被选取,第三种没被选中。这样一重循环枚举颜色组合,再去遍历这种颜色组合下的全部节点,通过DFS跑出每个符合颜色要求的连通块节点数。我们 展开全文
头像 sunsetcolors
发表于 2020-05-05 22:17:44
A 多彩的树 题目地址: https://ac.nowcoder.com/acm/contest/5556/A 基本思路: 我们看这个K只有10,所以很容易想到状压,那么我们状压颜色,然后对于每种情况我们去找图中只包含这几种颜色的连通块,对于每个联通块,假如包含n个顶点,那么路径就有条,也就 展开全文
头像 苟且的狮子
发表于 2021-03-17 18:46:37
状压dp、容斥 首先我们要知道树的一个重要的特性:对于树来说,他的路径总和为: 刚开始我想换根dp。。。。还以为自己想到了一个新的方法。。。。打算先以1为根处理以每个节点为起点,到其子树中找路径能找到的路径和然后再通过找子结点和父节点的关系从而换根 但是,这里的路径,只是通过找子结点和父节点的关系 展开全文