分析:哈密顿图需要满足以下条件:
1. 首尾结点相等
2. 结点总个数为n+1
3. 相邻节点是连通的
4. 包含了所有节点
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 210;
int e[maxn][maxn], tem[maxn], vis[maxn];
int main(){
//freopen("aa.txt", "r", stdin);
int n, m, k, u, v, knum;
cin >> n >> m;
for(int i = 0; i<m; i++){
cin >> u >> v;
e[u][v] = e[v][u] = 1;
}
cin >> k;
for(int i = 0; i<k; i++){
cin >> knum;
int flag = 1;
for(int j = 0; j<knum; j++){
cin >> tem[j];
}
if(knum != n+1) flag = 0;
else if(tem[0] != tem[knum-1]) flag = 0;
else {
memset(vis, 0, sizeof vis);
for(int j = 1; j<knum; j++){
vis[tem[j]] = 1;
}
for(int j = 1; j<=n; j++){
if(!vis[j]) flag = 0;
}
for(int j = 1; j<knum; j++){
u = tem[j-1], v = tem[j];
if(!e[u][v]) flag = 0;
}
}
if(flag) cout << "YES\n";
else cout << "NO\n";
}
return 0;
}