zoukankan      html  css  js  c++  java
  • 1134 Vertex Cover (25 分)图

    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. 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 N1) 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
    题目大意:
      图的每条边通过两个顶点来描述,对于图的每条边,如果该边对应的两个顶点中至少有一个在给定顶点集合中,
    则输出“Yes”(所有边都要满足),否则输出“No"。
    思路:
      因为要遍历图的每一条边,所以要使用邻接表存储。对于待判定的顶点集,使用哈希。遍历每一条边,如果这条边
    的两个顶点都不在顶点集合中,输出"No",返回。如果遍历结束还没有返回,则输出”Yes"即可。
    #include<iostream>
    #include<vector>
    #include<algorithm>
    #include<queue>
    #include<string>
    #include<map>
    #include<set>
    #include<stack>
    #include<string.h>
    #include<cstdio>
    #include<cmath>
    using namespace std;
    
    vector<vector<int>>graph;
    
    void judge(int temp[],int n)
    {
        for(int i=0;i<n;i++)
        {
            for(auto num:graph[i])
            {
                if(temp[i]==0&&temp[num]==0)
                {
                    printf("No
    ");
                    return;
                }
            }
        }
        printf("Yes
    ");
        return;
    }
    
    
    int main()
    {
        int n,m;
        cin>>n>>m;
        graph.resize(n);
        for(int i=0;i<m;i++)
        {
            int start,endL;
            cin>>start>>endL;
            graph[start].push_back(endL);
           // graph[endL].push_back(endL);
        }
        cin>>m;
        for(int i=0;i<m;i++)
        {
            int k;
            cin>>k;
            int temp[n];
            memset(temp,0,n*sizeof(int));
    
            for(int j=0;j<k;j++)
            {
               int a;
               cin>>a;
               temp[a]=1;
            }
            judge(temp,n);
        }
    
        return 0;
    }

      
  • 相关阅读:
    【洛谷3214】[HNOI2011] 卡农(思维)
    【洛谷2609】[ZJOI2012] 数列(高精度)
    【洛谷4501】[ZJOI2018] 胖(二分+RMQ)
    【洛谷4726】【模板】多项式指数函数(多项式 exp)
    uC/OS-II之入门与介绍20160525
    [转]Delphi 关键字详解
    [转]单元文件结构
    Delphi ComboBox的属性和事件、及几个鼠标事件的触发
    Delphi 用ToolButton和MonthCalendar实现DateTimePicker的功能
    Delphi 动态改变Rzsplitter的Orientation(方向)属性
  • 原文地址:https://www.cnblogs.com/zhanghaijie/p/10323555.html
Copyright © 2011-2022 走看看