#include<stdio.h> #include<iostream> #include<string.h> #include<algorithm> #include<math.h> #include<vector> using namespace std; struct node { int u; int v; }a[10005]; int vis[10005]; int main() { int n,m; cin>>n>>m; for(int i=1;i<=m;i++) cin>>a[i].u>>a[i].v; int k; cin>>k; while(k--) { int len,flag=0,b; cin>>len; memset(vis,0,sizeof(vis)); for(int i=1;i<=len;i++) { cin>>b; vis[b]=1;//打下了b城市 } for(int i=1;i<=m;i++) //枚举出现过的m个a[i].u <--> a[i].v结盟对 { if(!vis[a[i].u] && !vis[a[i].v]) //一边两端点全都没在摧毁区 o_o (将军你这打法不对啊 人家还好好的绑在一起同生共死 你怎么分而治之 只要有一个结盟团队存在就标记为1 马上跳出 pass你这垃圾方案 朕就是这样决绝) {flag=1; break;} //if o_x 联边只要有一个端点在vis摧毁区就孤立了 俗称唇亡齿寒(f = 0说明攻击方案暂且可行) } if(!flag) printf("YES ");//检查所有结盟对发现都被打散了 要么垮某一个 要么全垮了 ojbk else printf("NO "); //剩余的城市并没有都变成孤立无援 } return 0; }