【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;
}


目录
相关文章
1134. Vertex Cover (25)
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.
1062 0
二分图匹配 + 最小点覆盖 - Vertex Cover
 Vertex Cover Problem's Link   Mean:  给你一个无向图,让你给图中的结点染色,使得:每条边的两个顶点至少有一个顶点被染色。
1136 0
2019ICPC上海K-Color Graph(二分图 状压枚举)
2019ICPC上海K-Color Graph(二分图 状压枚举)
89 0
|
存储 运维 安全
阿云漫画 | Move to Cloud:凭什么安全?
编者按: 网络世界不断诞生、跳动的数据字节们,他们随着业务游走虚拟世界,在应用间穿梭。复杂环境里数据安全应处于精细设计的系统中数据的一生应当被这样保护。
290 0
|
C++
【PAT甲级 - C++题解】1033 To Fill or Not to Fill
【PAT甲级 - C++题解】1033 To Fill or Not to Fill
87 0
|
存储 C++ 容器
【PAT甲级 - C++题解】1154 Vertex Coloring
【PAT甲级 - C++题解】1154 Vertex Coloring
72 0
SVG 夜晚的灯塔案例(use、mask、clipPath ...)
SVG 夜晚的灯塔案例(use、mask、clipPath ...)
104 0
|
C++
【PAT甲级 - C++题解】1045 Favorite Color Stripe
【PAT甲级 - C++题解】1045 Favorite Color Stripe
94 0
零元学Expression Blend 4 - Chapter 24 以实作了解Cover Flow功能
原文:零元学Expression Blend 4 - Chapter 24 以实作了解Cover Flow功能 今天要介绍一个Silverlight Toolkit内好用且在图片展示操作上很常见的元件-「...
1358 0
|
C#
零元学Expression Blend 4 - Chapter 39 虾米?!同款?不同师傅!告诉你Visible、Hidden与Collapsed的差异!
原文:零元学Expression Blend 4 - Chapter 39 虾米?!同款?不同师傅!告诉你Visible、Hidden与Collapsed的差异! 由此可知 Hidden为隐藏项目,但也保留项目的配置空间 而Collapsed为隐藏项目,但因为没有保留项目的配置空间,所以会使得绿色区块位置改变 MSDN提到: Visibility 值为 Collapsed 的项目不会占用任何配置空间。
1414 0

热门文章

最新文章