PAT_甲级_1134 Vertex Cover

题目大意:

如果一个图的所有边的领接点至少有一个点在集合中,那么就称为这个集合为一个vertex cover,现给出一个图的顶点N和边数M,M条边的信息,和K次查询的集合元素,问当前集合是否是该图的一个vertex cover。

算法思路:

我们使用edges数组存储输入的M条边,每一次查询的时候就使用unordered_map vertices记录输入的集合顶点为true,然后遍历每一条边,如果该边的2个领接点有一个不存在集合中,输出No,否则输出Yes。

提交结果:

截屏2020-11-26 下午3.36.04.png

AC代码:

#include
#include 

using namespace std;

struct Edge{
    int a,b;
}edges[10005];

int main(){
    int N,M;
    scanf("%d %d",&N,&M);
    for (int i = 0; i < M; ++i) {
        int a,b;
        scanf("%d %d",&a,&b);
        edges[i].a = a;
        edges[i].b = b;
    }
    int K;
    scanf("%d",&K);
    for (int j = 0; j < K; ++j) {
        unordered_map vertices;
        scanf("%d",&N);
        for (int i = 0; i < N; ++i) {
            int vertex;
            scanf("%d",&vertex);
            vertices[vertex] = true;
        }
        bool isCover = true;
        for(int i=0;i

你可能感兴趣的:(算法-数据结构,c++)