题目描述
知识点: 图,判断环
思路: 按照题目模拟判断就可以了。
#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
const int N = 210;
int g[N][N];
int n,m,k;
bool st[N];
bool jud(vector<int> path){
memset(st,0,sizeof st);
for(int i = 0;i < path.size();i++){
if(i != 0 && path[i] == path[0]) break;
else if(st[path[i]] == true) return false;
else if(i < path.size()-1){
if(g[path[i+1]][path[i]] == 0) return false;
}
st[path[i]] = true;
}
if(path[path.size()-1] != path[0]) return false;
for(int i = 1;i <= n;i++) if(!st[i]) return false;
return true;
}
int main(){
cin>>n>>m;
while(m--){
int a,b;
cin>>a>>b;
g[a][b] = g[b][a] = 1;
}
cin>>k;
while(k--){
vector<int> path;
int a;
cin>>a;
while(a--){
int c;
cin>>c;
path.push_back(c);
}
if(jud(path)) puts("YES");
else puts("NO");
}
return 0;
}