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.

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:

Nv v[1] v[2] ... v[Nv]

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
#include <iostream>
#include <vector>
using namespace std;

int main(){
    int n, m, a, b;
    cin >> n >> m;
    vector<int> nv[n];
    
    for (int i = 0; i < m; i++) {
        cin >> a >> b;
        nv[a].push_back(i);
        nv[b].push_back(i);
    }
    
    int k, p, t;
    cin >> k;
    for (int i = 0; i < k; i++) {
        bool ans[m];
        fill(ans, ans+m, false);
        cin >> p;
        
        for (int j = 0; j < p; j++) {
            cin >> t;
            for (int k = 0; k < nv[t].size(); k++) {
                ans[nv[t][k]] = true;
            }
        }
        
        bool flag = true;
        for (int j = 0; j < m; j++) {
            if (!ans[j]) {
                flag = false;
                break;
            }
        }
        
        if (flag) {
            cout << "Yes\n";
        }else{
            cout << "No\n";
        }
    }
    
    return 0;
}
 
目录
相关文章
|
11月前
|
存储
【PAT甲级】1134 Vertex Cover
【PAT甲级】1134 Vertex Cover
51 0
|
算法 计算机视觉 C++
积分图像(Integral image)
积分图算法由Crow在1984年首次提出,是为了在多尺度透视投影中提高渲染速度。积分图算法是一种快速计算图像区域和以及图像区域平方和的算法。它的核心思想就是对每一个图像建立起自己的积分图查找表,在图像处理的阶段就可以根据预先建立积分图查找表直接查找从而实现对均值卷积的线性时间计算。做到了卷积执行的时间与窗口大小无关。之前介绍的NL-means算法就可以采用积分图算法进行优化加速。
123 0
积分图像(Integral image)
|
算法
Transition matrix
**Transition matrix** 中文名:转移矩阵;转换矩阵;跃迁矩阵;状态转移矩阵
2544 0
|
算法
Split Shape by Plane in OpenCASCADE
Split Shape by Plane in OpenCASCADE eryar@163.com Abstract. Sometimes you want to split a shape by plane or even split a shape by a B Spline surfac...
1660 0
|
人工智能 图形学
OpenCASCADE Shape Location
OpenCASCADE Shape Location eryar@163.com Abstract. The TopLoc package of OpenCASCADE gives resources to handle 3D local coordinate systems called Locations.
1529 0
|
算法框架/工具 索引 Caffe
Faster RCNN 运行自己的数据,刚开始正常,后来就报错: Index exceeds matrix dimensions. Error in ori_demo (line 114) boxes_cell{i} = [boxes(:, (1+(i-1)*4):(i*4)), scores(
function script_faster_rcnn_demo() close all; clc; clear mex; clear is_valid_handle; % to clear init_key run(fullfile(filepart...
997 0
[LeetCode] Smallest Rectangle Enclosing Black Pixels
This post shares very detailed explanation of how to use binary search to find the boundaries of the smallest rectangle that encloses the black pixels.
1256 0