1134. Vertex Cover PAT 甲级真题


#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m, k, nv, a, b, num;
scanf("%d%d", &n, &m);
vector<int> v[n];
for (int i = 0; i < m; i++) {
scanf("%d%d", &a, &b);
v[a].push_back(i);
v[b].push_back(i);
}
scanf("%d", &k);
for (int i = 0; i < k; i++) {
scanf("%d", &nv);
int flag = 0;
vector<int> hash(m, 0);
for (int j = 0; j < nv; j++) {
scanf("%d", &num);
for (int t = 0; t < v[num].size(); t++)
hash[v[num][t]] = 1;
}
for (int j = 0; j < m; j++) {
if (hash[j] == 0) {
printf("No\n");
flag = 1;
break;
}
}
if (flag == 0) printf("Yes\n");
}
return 0;
}

------------------------------------

思维定式: 保存每个点包含的边枚举集合里面每个节点的所有边,判断有没有那条边是没有覆盖的

vector<int>hash(m,0);

猜你喜欢

转载自www.cnblogs.com/zxzmnh/p/11680307.html