zoukankan      html  css  js  c++  java
  • 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 1), 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​​]. where N​v​​ is the number of vertices in the set, and ['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

    题意:

      给出一个图和一个图中部分顶点所构成的集合,判断图中的所有边是不是都和集合中的顶点相关。

    思路:

      利用邻接矩阵来存储图,然后查询与集合中顶点相连的边的条数(注意不要重复)是不是与M(图中边数的总和)相等。

    Code:

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 int main() {
     6     int n, m, k;
     7     cin >> n >> m;
     8 
     9     vector<vector<int> > grap(n + 1);
    10     int v1, v2;
    11     for (int i = 0; i < m; ++i) {
    12         cin >> v1 >> v2;
    13         grap[v1].push_back(v2);
    14         grap[v2].push_back(v1);
    15     }
    16 
    17     cin >> k;
    18     int nv, t, edges;
    19     unordered_set<int> uset;
    20     for (int i = 0; i < k; ++i) {
    21         cin >> nv;
    22         uset.clear();
    23         edges = 0;
    24         for (int j = 0; j < nv; ++j) {
    25             cin >> t;
    26             uset.insert(t);
    27             for (int k : grap[t])
    28                 if (uset.find(k) == uset.end()) edges++;
    29         }
    30         if (edges == m)
    31             cout << "Yes" << endl;
    32         else
    33             cout << "No" << endl;
    34     }
    35     return 0;
    36 }
    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    poj 2728 Desert King
    uva 439 Knight Moves
    hdu 1875 畅通工程再续
    scau实验题 8600 骑士周游问题(有障碍物)
    scau实验题 8596 Longest Ordered Subsequence
    poj 1679 The Unique MST
    uva 527 Oil Deposits
    poj 2533 Longest Ordered Subsequence
    .net 程序员 java 开发入门
    Collation conflict occur at operation on User define funtion & table's column
  • 原文地址:https://www.cnblogs.com/h-hkai/p/12735204.html
Copyright © 2011-2022 走看看