题目

题意: 给一个无向图,然后查询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;

}