题目描述
分析:利用一个散列记录各个边的顶点是否在所给点的集合中
#include<cstdio>
#include<cstring>
struct edge{
int u,v;
}e[10005];
int vertex[10005];
int main(){
int m,n;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
scanf("%d%d",&e[i].u,&e[i].v);
}
int k;
scanf("%d",&k);
while (k--)
{
int x,u;
scanf("%d",&x);
memset(vertex,0,sizeof(vertex));
while (x--)
{
scanf("%d",&u);
vertex[u]=1;
}
bool flag=true;
for(int i=0;i<m;i++){
if(!vertex[e[i].u]&&!vertex[e[i].v]){
flag=false;
break;
}
}
if(flag){
printf("Yes\n");
}
else{
printf("No\n");
}
}
}