L2-1 分而治之 (25 分)
#include<cstdio>
#include<iostream>
#include<set>
using namespace std;
const int maxn=1e4+10;
int mp[maxn][2];
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
scanf("%d%d",&mp[i][0],&mp[i][1]);
}
int k;
scanf("%d",&k);
int np,tmp;
while(k--){
scanf("%d",&np);
set<int> s;
while(np--){
scanf("%d",&tmp);
s.insert(tmp);
}
bool flag=true;
for(int i=0;i<m;i++){
if(s.find(mp[i][0])==s.end()&&s.find(mp[i][1])==s.end()){
flag=false;
break;
}
}
if(flag) printf("YES\n");
else printf("NO\n");
}
return 0;
}