P16294 [蓝桥杯 2026 省 Java A 组] 子树染色

题目描述

给定一棵有 $n$ 个结点的树,结点编号为 $1$ 到 $n$,其中结点 $1$ 是树根。现在需要在这棵树上选择一些结点进行染色。 树上有 $m$ 个关键结点。对于每个关键结点 $x$,设其子树大小为 $s$(子树包含 $x$ 本身及其所有后代),则以 $x$ 为根的子树中,被染色的结点数必须不少于 $\lceil \frac{s}{2} \rceil$。 请你求出,在满足所有关键结点要求的前提下,最少需要染色多少个结点。

输入格式

输入共 $n + 1$ 行。 第一行包含两个整数 $n, m$,分别表示结点总数和关键结点数量; 第二行包含 $m$ 个互不相同的整数,表示所有关键结点的编号; 接下来 $n - 1$ 行,每行包含两个整数 $a, b$,表示结点 $a$ 和结点 $b$ 之间有一条边。

输出格式

输出一个整数,表示最少需要染色的结点总数。

说明/提示

### 【样例说明】 一种最优方案是将结点 $4,5,7,9,10$ 染色,共 $5$ 个结点。 ### 【评测用例规模与约定】 对于 $30\%$ 的评测用例,$1 \le n \le 200$; 对于所有的评测用例,$1 \le m \le n \le 100000$,$1 \le a, b \le n$。