题意:给定图的边信息,问待查询顶点集是否是图的顶点覆盖集,顶点覆盖集:图中所有的边至少一个顶点在顶点集中。
tip:将待查顶点集所有连边全部去掉,在判断是否还有边即可
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<int>s[10003];
int main() {
int n,m;
cin>>n>>m;
for(int i=0; i<m; ++i) {
int a,b;
cin>>a>>b;
s[a].push_back(b);
s[b].push_back(a);//建图
}
int k;
cin>>k;
for(int i=0; i<k; ++i) {
int t;
cin>>t;
vector<int>temp[10003]=s;
for(int l=0; l<t; ++l) {
int a;
cin>>a;
for(int j=0; j<temp[a].size(); ++j) {
auto it=find(temp[temp[a][j]].begin(),temp[temp[a][j]].end(),a);
temp[temp[a][j]].erase(it);//删边
}
temp[a].clear();//删边
}
int flag=0;
for(int j=0; j<n; ++j)
if(temp[j].size()) {
flag=1;
cout<<"No\n";
break;
}
if(!flag)
cout<<"Yes\n";
}
return 0;
}