题目描述

背景

若能将无向图G=(V,E)G=(V,E) 画在平面上使得任意两条无重合顶点的边不相交,则称GG 是平面图

判定一个图是否为平面图的问题是图论中的一个重要问题

现在假设你要判定的是一类特殊的图,图中存在一个包含所有顶点的环,即存在哈密顿回路

输入

输入文件的第一行是一个正整数TT ,表示数据组数 (每组数据描述一个需要判定的图)。

接下来从输入文件第二行开始有TT 组数据

每组数据的第一行是用空格隔开的两个正整数NNMM ,分别表示对应图的顶点数和边数

紧接着的MM 行,每行是用空格隔开的两个正整数uuvv(1u,vN)\left(1\leq u,v\leq N\right),表示对应图的一条边(u,v)\left(u,v\right)

输入的数据保证所有边仅出现一次

每组数据的最后一行是用空格隔开的NN 个正整数,从左到右表示对应图中的一个哈密顿回路V1,V2,,VNV_1,V_2,\cdots,V_N

即对任意iji\not=jViVjV_i\not=V_j 且对任意1iN11\leq i\leq N-1(Vi,Vi1)E\left(V_i,V_i-1\right)\in E(V1,VN)E\left(V_1,V_N\right)\in E

数据范围

输入的数据保证100%100\% 的数据满足T100,3N200,M10000T\leq100,3\leq N\leq200,M\leq10000

输出

包含TT 行,若输入文件的第ii 组数据所对应图是平面图,则在第ii 行输出YES\text{YES},否则在第ii 行输出NO\text{NO},注意均为大写字母

思路

好了,看完了巨长无比的题面,我们的第一想法肯定是画个图看看

平面图示例

对于这张图,1234561\rightarrow2\rightarrow3\rightarrow4\rightarrow5\rightarrow6 显然是一个畸形的哈密顿回路

131\rightarrow3464\rightarrow6515\rightarrow1 这三条边并没有与其它边相交

所以…这是一个符合题意的图!(惊喜

不可能成为平面图的示例

而对于第二张图,无论这几条边怎么组合,都不可能不相交(不信你试试

所以这张图就是一个NO\text{NO}

OVER

但是我们该怎么用程序实现呢

容易发现,题目给了一个非常有用的限制条件

哈密顿回路

一个环会将平面分成两个部分:环内和环外~~(废话~~

因此,一条边的位置也只有3种可能:环内,环上,环外

除去组成环的边,我们就只剩下了两种可能

这™不就是2-SAT的定义吗…

我们想一下怎么建图

首先我们定义两条边是不相容的(随手起的

当且仅当它们不可能同为以上两种可能的一种

举个🌰

不相容的例子