AT_code_festival_exhibition_a パズル

题目描述

有一个由 $N$ 个顶点和 $M$ 条无向边组成的简单图(不一定连通)。$N$ 个顶点依次编号为 $1,2,\ldots,N$。 当选择某三个不同的顶点 $a,b,c$ 时,如果存在连接 $a$ 和 $b$ 的边、$b$ 和 $c$ 的边、以及 $c$ 和 $a$ 的边,则称 $(a,b,c)$ 为一个“三元组”。 现在,你可以对任意一个三元组 $(a,b,c)$ 进行如下称为“旋转”的操作: - 顶点 $a$ 的新编号变为顶点 $c$ 的原编号; - 顶点 $b$ 的新编号变为顶点 $a$ 的原编号; - 顶点 $c$ 的新编号变为顶点 $b$ 的原编号。 你可以对任意三元组进行任意次数的旋转操作,目标是使每个顶点上的编号最终变为 $y_1,y_2,\ldots,y_N$(即第 $i$ 个顶点的编号为 $y_i$)。请你判断是否可以通过上述操作实现目标编号。

输入格式

输入通过标准输入给出,格式如下: > $N$ $M$ > $a_1$ $b_1$ > $a_2$ $b_2$ > $\vdots$ > $a_M$ $b_M$ > $y_1$ $y_2$ $\ldots$ $y_N$ - 第 $1$ 行包含两个整数 $N\ (1\leq N\leq 2000)$ 和 $M\ (1\leq M\leq 2000)$,分别表示顶点数和边数。 - 接下来的 $M$ 行,每行包含两个不同的整数 $a_i, b_i\ (1\leq a_i, b_i\leq N)$,表示顶点 $a_i$ 和 $b_i$ 之间有一条边。 - 接下来的 $1$ 行包含 $N$ 个互不相同的整数 $y_1, y_2, \ldots, y_N\ (1\leq y_i\leq N)$,表示目标编号。

输出格式

如果可以通过题目描述的操作实现目标编号,输出 "YES";否则输出 "NO"。最后输出换行符。

说明/提示

### 样例解释 1 由于存在三元组 $(1,2,3)$,通过旋转两次可以实现目标编号。 ### 样例解释 2 不存在任何三元组,因此无法进行旋转操作,无法实现目标编号。 ### 样例解释 3 无论如何操作,都无法将顶点 $6$ 的编号变为 $1$,因此无法实现目标编号。 由 ChatGPT 4.1 翻译