#include <stdio.h>
int main()
{
int G[200][200],i,j,VertexNum,EdgeNum,v1,v2,k,SeqSize,IsHC,visited[200];
int seq[1000];
scanf("%d %d", &VertexNum, &EdgeNum);
for (i = 0; i < VertexNum; i++)
for (j = 0; j < VertexNum; j++)
G[i][j] = 0;
for (i = 0; i < EdgeNum; i++) {
scanf("%d %d", &v1, &v2);
G[v1-1][v2-1] = 1;
G[v2-1][v1-1] = 1;
}
scanf("%d", &k);
while (k--) {
IsHC = 1;
scanf("%d", &SeqSize);
for (i = 0; i < SeqSize; i++)
scanf("%d", &seq[i]);
if (SeqSize != VertexNum + 1 || seq[0] != seq[SeqSize - 1]) {
IsHC = 0;
printf("NO\n");
continue;
}
for (i = 0; i < VertexNum; i++)
visited[i] = 0;
for (i = 0; i < SeqSize - 1; i++) {
if (visited[seq[i] - 1] || !G[seq[i] - 1][seq[i + 1] - 1]) {
IsHC = 0;
printf("NO\n");
break;
}
visited[seq[i] - 1] = 1;
}
if (IsHC)
printf("YES\n");
}
return 0;
}
1122. Hamiltonian Cycle
最新推荐文章于 2022-11-19 15:31:31 发布