思路:
遍历每一条边,两个结点至少要有一个在所给结点中
代码:
#include<iostream>
#include<vector>
#include<unordered_map>
using namespace std;
vector<pair<int,int>> v;
unordered_map<int,bool> mp;
int main(){
int n,m,k;
scanf("%d%d",&n,&m);
for(int i=0;i<m;i++){
int v1,v2;
scanf("%d%d",&v1,&v2);
v.push_back(make_pair(v1,v2));
}
scanf("%d",&k);
for(int i=0;i<k;i++){
int num,j;
scanf("%d",&num);
for(j=0;j<num;j++){
int v;
scanf("%d",&v);
mp[v]=true;
}
for(j=0;j<m;j++)
if(!mp[v[j].first]&&!mp[v[j].second])
break;
j==m?printf("Yes
"):printf("No
");
mp.clear();
}
return 0;
}