https://pintia.cn/problem-sets/994805342720868352/problems/994805351814119424
本题考察的就是哈密顿回路
- 只能走n+1步
- 有n个不同的点
- 且开头结尾必须是同一个点
- 且所有的路径都是可达的
#include<bits/stdc++.h>
using namespace std;
const int N=510;
const int M=1010;
int g[N][N],n,m,k,t;
int a[M];
/*bool check()//方法一
{
int st[M]={0};
for(int i=0;i<=t-1;i++)
{
if(i&&(g[a[i-1]][a[i]]!=1 || st[a[i]]&&i!=t-1 )) return false;
st[a[i]]=1;
}
if(a[0]!=a[t-1] || t!=n+1 ) return false;
return true;
}*/
bool check()//方法二
{
set<int>st;
for(int i=0;i<t;i++)
{
st.insert(a[i]);
if(i&&g[a[i-1]][a[i]]!=1) return false;
}
if(st.size()!=n || a[0]!=a[t-1] || t!=n+1 ) return false;
return true;
}
int main(void)
{
cin>>n>>m;
memset(g,0x3f,sizeof g);
for(int i=0;i<m;i++)
{
int a,b; cin>>a>>b;
g[a][b]=g[b][a]=1;
}
cin>>k;
for(int i=0;i<k;i++)
{
cin>>t;
for(int j=0;j<t;j++) cin>>a[j];
if(check()) puts("YES");
else puts("NO");
}
return 0;
}