#include <stdio.h>
//只要有连接就算呗
int mp[206][206];
int main()
{
int N,M;
scanf ("%d%d",&N,&M);
while(M--)
{
int a,b;
scanf("%d%d",&a,&b);
mp[a][b] = 1;
mp[b][a] = 1;
}
int K;
scanf ("%d",&K);
int num[2006];
while (K--)
{
int n;scanf ("%d",&n);
for (int i = 0;i<n;i++)
{
scanf ("%d",num+i);
}
int flag = 0;
if (n!=N+1) flag = 1;
// printf("%d*",flag);
if (num[0]!=num[n-1]) flag =1;
// printf("%d**",flag);
int sum = (N+1)*N/2;
for (int i = 1;i<n;i++)
{
sum-=num[i];
if (!mp[num[i-1]][num[i]]) flag = 1;
//这个只是检验是否通过而已 还有每一个顶点都要访问
}
// printf("%d***",flag);
if (!flag && !sum) printf ("YES\n");
else printf ("NO\n");
}
return 0;
}
这题咋说呢,也没考什么知识点,但是你输入开始都忘了输。
然后那个num数组要开的大一点,之后就是几个常规常据的判断了,也没啥好说的。