题意
vertex cover是一个集合,图的每一条边都至少有一个顶点在该集合中。判断一个集合是否为vertex cover,是则输出Yes,否就输出No。
代码
#include <iostream>
#include <cstdio>
#include <vector>
#include <set>
using namespace std;
int N,M;
int K;
struct Node
{
int x;
int y;
};
vector<Node> edge;
int main()
{
scanf("%d%d",&N,&M);
while(M--)
{
int x,y;
scanf("%d%d",&x,&y);
edge.push_back(Node{x,y});
}
scanf("%d",&K);
while(K--)
{
int k;
scanf("%d",&k);
set<int> cover;
for(int i=0;i<k;i++)
{
int x;
scanf("%d",&x);
cover.insert(x);
}
bool flag = true;
for(int i=0;i<edge.size();i++)
{
if(cover.find(edge[i].x)!=cover.end())
{
continue;
}
if(cover.find(edge[i].y)!=cover.end())
{
continue;
}
flag = false;
break;
}
if(flag)
printf("Yes\n");
else printf("No\n");
}
return 0;
}