【PAT甲级】1134 Vertex Cover

简介: 【PAT甲级】1134 Vertex Cover

1134 Vertex Cover

A vertex cover of a graph is a set of vertices such that each edge of the graph is incident to at least one vertex of the set. Now given a graph with several vertex sets, you are supposed to tell if each of them is a vertex cover or not.


Input Specification:

Each input file contains one test case. For each case, the first line gives two positive integers N and M (both no more than 104), being the total numbers of vertices and the edges, respectively. Then M lines follow, each describes an edge by giving the indices (from 0 to N−1) of the two ends of the edge.


After the graph, a positive integer K (≤ 100) is given, which is the number of queries. Then K lines of queries follow, each in the format:


N v   v [ 1 ]   v [ 2 ] ⋯ v [ N v ] N_v\ v[1]\ v[2] ⋯ v[N_v]N v  v[1] v[2]⋯v[N v ]


where Nv is the number of vertices in the set, and v[i]'s are the indices of the vertices.


Output Specification:

For each query, print in a line Yes if the set is a vertex cover, or No if not.


Sample Input:

10 11
8 7
6 8
4 5
8 4
8 1
1 2
1 4
9 8
9 1
1 0
2 4
5
4 0 3 8 4
6 6 1 7 5 4 9
3 1 8 4
2 2 8
7 9 8 7 6 5 4 2


Sample Output:

No
Yes
Yes
No
No

题意

如果图中的一个顶点集合能够满足图中的每一条边都至少有一个端点在该集合内,那么这个顶点集合就是图的顶点覆盖。


现在给定一张图,以及若干个顶点集合,请你判断这些顶点集合是否是图的顶点覆盖。


思路

因为这题不涉及到最短路,只需按照题意进行模拟即可。我们可以直接用一个结构体数组来存储图中的每一条边,并用一个数组 st 来记录每次查询集合的点。


然后每次查询都去遍历所有边,题目要求只要边中的两个点至少一个点在集合中就满足顶点覆盖,所以只需最后判断是否所有边都满足该要求即可。

代码

#include<bits/stdc++.h>
using namespace std;
const int N = 10010;
//用结构体存储边
struct Edge {
    int a, b;
}e[N];
bool st[N];
int n, m;
int main()
{
    cin >> n >> m;
    for (int i = 0; i < m; i++)    cin >> e[i].a >> e[i].b;
    int k;
    cin >> k;
    while (k--)  //查询是否为顶点覆盖
    {
        int num, i;
        cin >> num;
        memset(st, 0, sizeof st); //初始化
        for (i = 0; i < num; i++)
        {
            int x;
            cin >> x;
            st[x] = true; //将该点标记
        }
        for (i = 0; i < m; i++)    //遍历每条边
            if (!st[e[i].a] && !st[e[i].b])    //边的两点中的一点在集合即可
                break;
        if (i < m) puts("No");
        else    puts("Yes");
    }
    return 0;
}


目录
相关文章
|
定位技术
94Echarts - 地理坐标/地图(Use lines to draw 1 million ny streets.)
94Echarts - 地理坐标/地图(Use lines to draw 1 million ny streets.)
54 0
|
6月前
|
编解码 人工智能
全球地表水数据集JRC Global Surface Water Mapping Layers, v1.2数据
全球地表水数据集JRC Global Surface Water Mapping Layers, v1.2数据
113 0
174Echarts - 象形柱图(Wish List and Mountain Height)
174Echarts - 象形柱图(Wish List and Mountain Height)
38 0
174Echarts - 象形柱图(Wish List and Mountain Height)
220Echarts - 3D 地球(Animating Contour on Globe)
220Echarts - 3D 地球(Animating Contour on Globe)
70 0
221Echarts - 3D 地球(Contour Paint)
221Echarts - 3D 地球(Contour Paint)
60 0
171Echarts - 象形柱图(Water Content)
171Echarts - 象形柱图(Water Content)
29 0
|
定位技术
GIS开发:分享Mapbox Vector tiles
GIS开发:分享Mapbox Vector tiles
230 0
GIS开发:分享Mapbox Vector tiles
|
存储 机器学习/深度学习 算法
【PAT甲级】1087 All Roads Lead to Rome
【PAT甲级】1087 All Roads Lead to Rome
77 0
|
C++
【PAT甲级 - C++题解】1027 Colors in Mars
【PAT甲级 - C++题解】1027 Colors in Mars
65 0
|
编解码
猪笼草表面连续定向输水Continuous directional water transport on the peristome surface of Nepenthes alata-2016-阅读笔记
打破了传统水往下流的思路,仿生猪笼草表面结构,提出定向水传输结构。