CF1037D.Valid BFS?

传统题 时间 1000 ms 内存 512 MiB 9 尝试 33 已通过 8 标签

Valid BFS?

题目描述

BFSBFS算法的定义如下:

  1. 给定一个无向图,顶点编号为 11nn。将队列 qq 初始化为只包含顶点 11 的新队列,并将顶点 11 标记为已访问。
  2. 从队列 qq 的头部取出一个顶点 vv
  3. 输出顶点 vv 的编号。
  4. 按照任意顺序遍历所有满足以下条件的顶点 uuuuvv 的邻居且尚未被标记为已访问。将顶点 uu 标记为已访问,并将其插入到队列 qq 的尾部。
  5. 如果队列非空,则从步骤 2 继续执行。
  6. 否则结束。

由于每个顶点的邻居被遍历的顺序可以不同,因此 BFS 可能输出多种不同的序列。

本题需要判断给定的序列是否对应于给定的树从顶点 11 开始进行某次合法的 BFS 遍历所得的结果。树是一种无向图,其中任意两个顶点之间有且仅有一条简单路径。

输入

第一行包含一个整数 nn1n21051 \le n \le 2 \cdot 10^5),表示树中节点的数量。

接下来 n1n - 1 行描述树的边。每行包含两个整数 xxyy1x,yn1 \le x, y \le n)—— 表示树中一条边所连接的两个端点。保证给定的图是一棵树。

最后一行包含 nn 个互不相同的整数 a1,a2,,ana_1, a_2, \ldots, a_n1ain1 \le a_i \le n)—— 待检查的序列。

输出

如果该序列对应于给定的树从顶点 11 开始的某次合法 BFS 遍历,则输出 "Yes",否则输出 "No"。

说明

两个样例测试用例中的树是相同的。

在这棵树中,合法的 BFS 顺序共有两种:

  • 1,2,3,41, 2, 3, 4
  • 1,3,2,41, 3, 2, 4

而顺序 1,2,4,31, 2, 4, 3 则不对应于任何合法的 BFS 顺序。

样例

4
1 2
1 3
2 4
1 2 3 4
Yes
4
1 2
1 3
2 4
1 2 4 3
No

在线编程 IDE

建议全屏模式获得最佳体验