题目名称 4274. [THUPC 2025 pre] 树上染色
输入输出 thupc_2025_pre_J.in/out
难度等级 ★★☆
时间限制 1000 ms (1 s)
内存限制 512 MiB
测试数据 12
题目来源 GravatarLikableP 于2026-01-24加入
开放分组 全部用户
提交状态
分类标签
树形DP
查看题解 分享题解
通过:1, 提交:1, 通过率:100%
GravatarLikableP 100 3.927 s 43.28 MiB C++
关于 树上染色 的近10条评论(全部评论)

4274. [THUPC 2025 pre] 树上染色

★★☆   输入文件:thupc_2025_pre_J.in   输出文件:thupc_2025_pre_J.out   简单对比
时间限制:1 s   内存限制:512 MiB

【题目描述】

给你一棵 $n$ 个点的无根树,有 $k$ 个点初始为黑色,其余点初始为灰色,你可以在一开始将一些**灰色**点染成白色。染完后,现在进行如下操作,直到树上不存在灰色点。

每一轮对所有灰色点同时进行如下操作:

  1. 检查与该灰色点 $u$ 直接相连的点有没有黑色或白色点,如果没有,则 $u$ 保持灰色。
  2. 如果与 $u$ 直接相连的点有白色点,则 $u$ 变为白色。
  3. 如果与 $u$ 直接相连的点有黑色点,则 $u$ 变为黑色。

这个顺序说明同时与白色和黑色相邻时会被染成白色。

注意此处对所有灰色点同时进行操作,也就是说在这一轮被染上颜色的点不能作为其它点改变颜色的根据。

现在求一开始最少染几个点为白色,可以使树最终黑色点不超过 $k$ 个。

【输入格式】

第一行两个整数 $n,k\;(1\le n\le 10^6,1\le k \le n)$,含义见上文。

第二行 $k$ 个整数,代表一开始被染成黑色的点的标号。

第 $3\sim n+2$ 行每行两个整数 $u,v\;(1\le u,v\le n)$,代表一条树上的边。

【输出格式】

一行一个整数,为答案。

【样例输入 1】

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

【样例输出 1】

1

【样例输入 2】

10 3
1 6 8
1 2
2 3
3 4
4 5
4 6
5 7
5 8
6 9
7 10

【样例输出 2】

3

【样例 2 解释】

  • 对于第一组样例,一开始将 $2$ 号点染白即可。
  • 对于第二组样例,一开始将 $3,,4,9$ 号点染白为满足条件且数量最小一组方案。

【来源】

清华大学学生算法协会 GitLink 仓库