CF1037D Valid BFS?

题目描述

[BFS](https://en.wikipedia.org/wiki/Breadth-first_search) 算法定义如下: 1. 给定一个顶点编号为 $1$ 到 $n$ 的无向图。初始化队列 $q$,仅包含顶点 $1$,并将顶点 $1$ 标记为已访问。 2. 从队列 $q$ 的队首取出一个顶点 $v$。 3. 输出顶点 $v$ 的编号。 4. 按任意顺序遍历所有满足条件的顶点 $u$,其中 $u$ 是 $v$ 的邻居且尚未被标记为已访问。将顶点 $u$ 标记为已访问,并插入到队列 $q$ 的队尾。 5. 如果队列不为空,则返回第 2 步。 6. 否则算法结束。 由于每个顶点的邻居选择顺序可以不同,因此 BFS 可能输出多种不同的遍历序列。 本题要求你判断,给定的一个序列是否可能是从顶点 $1$ 开始对给定树进行 BFS 遍历得到的某种合法顺序。这里的“树”指的是一个无向图,任意两点之间恰好有一条简单路径。

输入格式

第一行包含一个整数 $n$($1 \le n \le 2 \cdot 10^5$),表示树的节点数。 接下来的 $n-1$ 行描述树的边。每行包含两个整数 $x$ 和 $y$($1 \le x, y \le n$),表示树的一条边的两个端点。保证给定的图是一棵树。 最后一行包含 $n$ 个互不相同的整数 $a_1, a_2, \ldots, a_n$($1 \le a_i \le n$),表示需要检查的序列。

输出格式

如果该序列是某种合法的 BFS 遍历顺序,输出 "Yes";否则输出 "No"。输出时不区分大小写。

说明/提示

两个样例测试用例中使用的是同一棵树。 对于这棵树,有两种合法的 BFS 遍历顺序: - $1, 2, 3, 4$, - $1, 3, 2, 4$。 序列 $1, 2, 4, 3$ 不对应于任何合法的 BFS 遍历顺序。 由 ChatGPT 4.1 翻译