题意: 给一个无向图,然后查询k个环,问是不是哈密尔顿环(一个环遍历图上所有点有始有终且不重复访问)。
tip:模拟 + 状态记录
#include<iostream>
#include<vector>
#include<set>
#include<cstring>
using namespace std;
int main() {
int n,m;
cin>>n>>m;
int s[203][203];
memset(s,0,sizeof(s));
for(int i=0; i<m; ++i) {
int a,b;
cin>>a>>b;
s[a][b]=1;
s[b][a]=1;
}
int k;
cin>>k;
for(int i=0; i<k; ++i) {
int t;
cin>>t;
int path[t];
for(int j=0; j<t; ++j)
cin>>path[j];
int flag=0;
int pre=path[0];
int checked[n+1]= {0};
for(int j=1; j<t; ++j) {
//存在路径,且未被访问过
if(s[pre][path[j]]&&!checked[path[j]]) {
checked[path[j]]=1;
pre=path[j];
}
else {
flag=1;
break;
}
}
for(int j=1; j<=n; ++j)
if(!checked[j])
flag=1;
if(flag)
cout<<"NO\n";
else cout<<"YES\n";
}
return 0;
}