#include <string.h>
#include <stdio.h>
int main()
{
int n, m;
scanf("%d %d", &n, &m);
int G[250][250];
memset(G, 0, sizeof(G));
for (int i = 0; i < m; i++)
{
int a, b;
scanf("%d %d", &a, &b);
G[a][b] = G[b][a] = 1;
}
scanf("%d", &m);
for (int i = 0; i < m; i++)
{
int num;
int k, start, pre, flag=1;
scanf("%d", &k);
int vis[1001];
memset(vis, 0, sizeof(vis));
if(k != n + 1) flag=0;
for (int j = 0; j < k; j++)
{
scanf("%d", &num);
if (j == 0)
start = num;
else if (G[pre][num] == 0)
flag = 0;
if (vis[num]>1&&num!=start)
flag = 0;
pre=num;//为前一个数
vis[num]++;
}
if(vis[start]>2||num!=start)flag=0;
if (flag==0) printf("NO\n");
else printf("YES\n");
}
return 0;
}
每个点只能走一次,除了起点。起点也不能超过两次。起始必须是同一点。