#codefestivalexhibitiona. [code_festival_exhibition_a]パズル
[code_festival_exhibition_a]パズル
问题描述
有一个由 个顶点和 条无向边组成的简单图(可能不连通)。这 个顶点从顶点 1 开始依次编号为 。
当选择三个不同的顶点 时,如果存在连接 和 的边,连接 和 的边,以及连接 和 的边,则称 是一个三元组。
现在,我们想要选择一个由三元组 组成的顶点集合,并进行如下操作:
- 将顶点 的新编号设为顶点 的旧编号
- 将顶点 的新编号设为顶点 的旧编号
- 将顶点 的新编号设为顶点 的旧编号
这个操作被称为“旋转”,我们希望对任意的三元组执行任意次数的旋转操作,最终使得每个顶点的编号分别为 。请编写一个程序来判断是否可以实现这样的转换。
输入
输入数据从标准输入中读取,具体格式如下:
: :
- 第一行包含两个用空格分隔的整数 (表示顶点的数量,)和 (表示边的数量,)。
- 第二行到第 行,每行包含两个不同的整数 和 (),用空格分隔。这表示顶点 和顶点 在图中是相连的。
- 第 行到第 行,每行包含一个不同的整数 (),用空格分隔。这表示目标图中每个顶点的编号。
输出
如果可以实现题目描述中的转换操作,则输出 "YES",否则输出 "NO"。最后换行。
示例1
3 3
1 2
2 3
3 1
2
3
1
输出示例1
YES
由于顶点 是一个三元组,我们可以执行两次旋转操作来达到目标图。
示例2
3 2
1 2
1 3
1
3
2
输出示例2
NO
由于不存在任何三元组,因此无法进行旋转操作,目标编号无法实现。
示例3
8 11
1 2
1 3
2 3
2 4
2 5
3 6
4 5
5 6
6 7
6 8
7 8
6
2
3
4
5
1
7
8
输出示例3
NO
无论如何操作,都无法使顶点 的编号变为 ,因此无法实现目标编号。