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$。