根据哈密顿回路的顺序,建立虚拟坐标,后根据虚拟坐标判断两不在回路上的边是否相交。若相交,则两条边必须:一条在内一条在外。根据2-SAT建边即可。
注意边数为10000,但根据平面图性质,m<=3*n-6,所以对于边数不满足性质的情况,直接判断不可行。
#include <bits/stdc++.h>
using namespace std;
const int N=605,M=8e5+5;
int T,n,m,tot,a[10005],b[10005],c[N],id[N],vec[N];
bool vis[N][N];
int now,top,col,dfn[N*2],low[N*2],sta[N*2],color[N*2];
int cnt,head[N*2];
struct edge{
int next,to;}e[M];
inline void add(int u,int v)
{
cnt++;
e[cnt].next=head[u];
e[cnt].to=v;
head[u]=cnt;
}
void tarjan(int u)
{
dfn[u]=low[u]=++now;
sta[++top]=