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 翻译