PAT(Advanced Level)A1134. Vertex Cover

题意

vertex cover要满足的是——图中的每一条边至少依附于点集中的一个点。判断给出的点集是否为vertex cover

思路

  • 对点集枚举所有的边,只要找到一条边不满足,我们就可以提前退出,判断这个点集不是vertex cover

代码

#include <iostream>
#include <algorithm>
#include <unordered_map>
#include <vector>
#include <cmath>
using namespace std;
struct edge {
    int u, v;
};
int main() {
    int N, M, K, nv;
    scanf("%d %d", &N, &M);
    int u, v;
    vector<edge> edge_table;    // 边表
    for(int i = 0; i < M; i++) {
        scanf("%d %d", &u, &v);
        edge_table.emplace_back(edge{u, v});
    }
    scanf("%d", &K);
    int t;
    while(K--) {
        scanf("%d", &nv);
        unordered_map<int, int> mp;
        for(int i = 0; i < nv; i++) {
            scanf("%d", &t);
            mp[t] = 1;
        }
        bool qualified = true;
        for(auto e: edge_table) {
            // 找到一条边,没有一个点在点集里就判定不合格
            if(mp[e.u] == 0 && mp[e.v] == 0) {
                qualified = false;
                break;
            }
        }
        if(qualified)
            printf("Yes
");
        else
            printf("No
");
    }
    return 0;
}
如有转载,请注明出处QAQ
原文地址:https://www.cnblogs.com/MartinLwx/p/14525980.html