a simple cycle that contains every vertex in a graph.
那么思考下如何判断:
1、cycle 要求v1=vn
2、simple 要求每个顶点只出现一次,这个条件结合每个顶点都要出现,可以按如下判断:
n=N+1且用set s记所有顶点,s.size()=N
3、cycle 要求是连通的,这也很简单,判断每次g[v[i]][v[i-1]]是否为1即可
#include<bits/stdc++.h>
using namespace std;
const int maxn=210;
int g[maxn][maxn];
int main(){
int n,m,k;
cin>>n>>m;
fill(g[0],g[0]+maxn*maxn,0);
while(m--){
int a,b;cin>>a>>b;
g[a][b]=g[b][a]=1;
}
cin>>k;
while(k--){
int size;cin>>size;
vector<int> v(size);set<int> s;
for(int i=0;i<size;i++){
cin>>v[i];
s.insert(v[i]);
}
if(size!=n+1||s.size()!=n||v[0]!=v[size-1]){
cout<<"NO"<<endl;
}else{
bool flag=true;
for(int i=1;i<size;i++){
if(g[v[i]][v[i-1]]!=1){
flag=false;break;
}
}
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}
return 0;
}