其实就是判断哈密顿路径的一道题
测试点一
判断给出的环的路径是否全部存在
测试点二
判断一个给出的环是否出现了整个图中的所有节点
AC
#include <bits/stdc++.h>
//#define int long long
#define eb emplace_back
#define pii pair<int,int>
#define endl \n
using namespace std;
const int N=2e2+10;
using ll=long long;
int n,m;
vector<int>vec[N];
void solve()
{
cin>>n>>m;
for(int i=0;i<m;++i)
{
int x,y;
cin>>x>>y;
vec[x].eb(y);
vec[y].eb(x);
}
int k;
cin>>k;
while(k--)
{
int number;
cin>>number;
if(number!=n+1)
{
cout<<"NO\n";
for(int i=0;i<number;++i)
{
int x;cin>>x;
}
}
else
{
set<int>st;
// cout<<"****\n";
int be=-1;cin>>be;
st.insert(be);
int cur=be;
bool flag=1;
for(int i=1;i<n;++i)
{
bool curflag=0;
int x;cin>>x;
st.insert(x);
for(auto &it:vec[cur])
{
if(it==x)
{
curflag=1;
break;
}
}
if(!curflag)flag=0;
cur=x;
}
bool curflag=0;
int ed=-1;cin>>ed;
st.insert(ed);
for(auto &it:vec[cur])
{
if(it==ed)
{
curflag=1;
break;
}
}
if(!curflag or st.size()!=n)flag=0;
// cout<<be<<" "<<ed<<"\n";
if(ed!=be or !flag)cout<<"NO\n";
else cout<<"YES\n";
}
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int T=1;
while(T--)solve();
return 0;
}
/*
1.测试点一,判断路径是否存在
2. 测试点二,判断所有的节点是否全部出现
*/