1122. Hamiltonian Cycle (25)

#include <iostream>
#include <string.h>

using namespace std;

int path[210][210];

int main()
{
	int n, m;
	scanf("%d%d", &n, &m);

	int i, a, b;
	for(i = 1; i <= m; i++)
	{
		scanf("%d%d", &a, &b);

		path[a][b] = 1;
		path[b][a] = 1;
	}

	int k;
	scanf("%d", &k);

	int num[210], vis[210], p, j, flag;
	for(i = 1; i <= k; i++)
	{
		scanf("%d", &p);

		for(j = 1; j <= p; j++)
		{
			scanf("%d", &num[j]);
		}

		flag = 1;
		if(p != n + 1 || num[1] != num[p])
		{
			flag = 0;
		}
		else
		{
			memset(vis, 0, sizeof(vis));

			for(j = 2; j <= p; j++)
			{
				a = num[j - 1];
				b = num[j];

				if(path[a][b] == 0)
				{
					flag = 0;
					break;
				}

				vis[b] = 1;
			}

			if(flag == 1)
			{
				for(j = 1; j <= n; j++)
				{
					if(vis[j] == 0)
					{
						flag = 0;
						break;
					}
				}
			}
		}

		if(flag == 1)
		{
			printf("YES\n");
		}
		else
		{
			printf("NO\n");
		}
	}

	system("pause");
	return 0;
}

 

posted on 2025-11-25 09:04  王景迁  阅读(0)  评论(0)    收藏  举报

导航