一開始以為是圖的遍歷,但后來才發(fā)現(xiàn)不用DFS,直接看這個路徑是否合法就可以
因為是遍歷所有節(jié)點,因此合法的環(huán)路徑必須是n+1個節(jié)點且頭尾相同,而且全部節(jié)點都要出現(xiàn),最后檢查這個路徑是否連通
#include<bits/stdc++.h>
using namespace std;
const int maxn=500;
int G[maxn][maxn],n,m;
bool vis[maxn];
int main()
{
scanf("%d%d",&n,&m);
while(m--)
{
int v1,v2;
scanf("%d%d",&v1,&v2);
G[v1][v2]=G[v2][v1]=1;
}
int k;
scanf("%d",&k);
while(k--)
{
int a[maxn],cnt;
scanf("%d",&cnt);
bool f=true;
memset(vis,false,sizeof(vis));
for(int i=0;i<cnt;i++)scanf("%d",&a[i]),vis[a[i]]=true;
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
f=false;
break;
}
}
for(int i=1;i<cnt;i++)
{
int v=a[i-1],u=a[i];
if(G[v][u]==0)
{
f=false;
break;
}
}
if(cnt!=n+1||a[0]!=a[cnt-1]||f==false)printf("NO\n");
else printf("YES\n");
}
return 0;
}