P14873 [ICPC 2020 Yokohama R] Formica Sokobanica

题目描述

最近发现了一种名为 **推箱子蚁** 的新蚂蚁物种。它们因其独特习性而引起了昆虫学家的注意。这些蚂蚁不形成蚁群。相反,个体建造自己的私人巢穴,并将食物(坚果)储存在巢穴中。一个巢穴包含许多由隧道连接的小房间。它们只将房间建造得比坚果稍大一点,仅留下足够空气流通的空间;它们无法进入有坚果的房间。为了节省劳力,隧道非常狭窄,其大小恰好能容纳一颗坚果,因此坚果不能留在隧道中,以便空气流通。 要进入一个有坚果的房间,必须将坚果通过连接它们的隧道推到该房间的任意一个相邻空房间中。如果除了蚂蚁进来的房间外没有其他相邻的空房间,坚果就无法被推开,因此蚂蚁无法进入该房间。 热衷于研究这种蚂蚁的昆虫学家 Myrmink 博士绘制了一个典型巢穴的示意图。该图还显示了哪些房间储存了坚果,以及蚂蚁最初在哪个房间。你的任务是编写一个程序,计算蚂蚁能够到达并进入的房间数量。将一颗坚果推入某个相邻的空房间可能会使一些房间变得无法到达,而选择另一个房间来推入则可能保持这些房间的可达性。可能存在许多这样的选择组合。在这种情况下,应该将所有可能通过一种或多种选择组合到达的房间都计算在内。 你可以假设蚂蚁最初所在的房间没有坚果,并且巢穴中没有循环路径。

输入格式

输入包含单个测试用例,格式如下,代表一个巢穴的示意图。 $$ \begin{aligned} &n \ m \\ &x_1 \ y_1 \\ &\vdots \\ &x_{n-1} \ y_{n-1} \\ &a_1 \\ &\vdots \\ &a_m \end{aligned} $$ 其中,$n$ 和 $m$ 分别是房间和坚果的数量。它们满足 $1 \le n \le 2 \times 10^5$ 且 $0 \le m < n$。房间编号从 $1$ 到 $n$。蚂蚁初始在房间 $1$。 接下来的 $n - 1$ 行中,每行有两个整数 $x_i$ 和 $y_i$ ($1 \le i \le n - 1$),表示一条隧道连接编号为 $x_i$ 和 $y_i$ 的房间。满足 $1 \le x_i \le n$,$1 \le y_i \le n$,且 $x_i \ne y_i$。没有两条隧道连接同一对房间。 剩下的 $m$ 行中,每行有一个整数 $a_k$ ($1 \le k \le m$,$2 \le a_k \le n$),表示编号为 $a_k$ 的房间中有一颗坚果。所有 $a_k$ 的值互不相同。

输出格式

输出应包含一行,一个整数,表示蚂蚁能够到达并进入的房间数量。