#L3550. 「COI 2020」Pastiri

「COI 2020」Pastiri

题目描述

给定一棵 NN 个节点的树,节点编号为 11NN。现在有 KK 只羊分布在树上的 KK 个节点上。

你的任务是在树上分配一些牧羊人,牧羊人遵循以下规则:

  1. 每个牧羊人只会看管离他最近的羊

  2. 如果有多只羊与牧羊人的距离相等,那么他会看管所有这些羊

  3. 牧羊人可以和羊在同一个节点上,此时他只看得管该节点上的羊

目标是:找到一种牧羊人的分配方案,使得每个羊至少被一个牧羊人看管,并且使用的牧羊人总数最少。

输入格式

第一行:两个整数 NNKK,分别表示树的节点数和有羊的节点数

接下来 N1N-1 行:每行两个整数 ai,bia_i, b_i,表示树的一条边

N+1N+1 行:KK 个整数 oio_i,表示有羊的节点编号

输出格式

第一行:一个整数 XX,表示牧羊人总数的最小值

第二行:XX 个整数,表示每个牧羊人分配到的节点编号

注:如果有多种解,输出任意一种即可

20 9
1 2
2 3
2 4
4 5
4 6
5 7
7 8
8 9
7 10
10 11
6 12
6 13
6 17
13 14
14 15
14 16
17 18
18 19
18 20
1 3 9 11 12 15 16 19 20
3
5 14 18

数据规模与约定

1N5×1051 \le N \le 5 \times 10^5

1KN1 \le K \le N

1ai,biN1 \le a_i, b_i \le N

1oiN1 \le o_i \le N