#include<iostream> #include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> #include<algorithm> #include<map> #include<vector> #include<queue> #include<set> using namespace std; int main(){ int n,m; int a[210][210]={0};//二维数组存图 cin>>n>>m;//点数n 边数m for(int i=0;i<m;i++){ int t1,t2; scanf("%d%d",&t1,&t2); a[t1][t2]=a[t2][t1]=1; } int cnt;//cnt次判断 cin>>cnt; while(cnt--){ int k; cin>>k;//给出k个点 vector<int>v(k); set<int> s;//去重且排序 int flag1=1,flag2=1; for(int i=0;i<k;i++){ scanf("%d",&v[i]); s.insert(v[i]); } //flag1判断结点是否多走,少走,或走成环 if(s.size()!=n || k-1 !=n ||v[0]!=v[k-1]) flag1=0;//注意前两种情况 //flag2判断这条路能不能走通 for(int i=0;i<k-1;i++) if(a[v[i]][v[i+1]] == 0) flag2=0; printf("%s",flag1&&flag2?"YES\n":"NO\n"); } system("pause"); return 0; }