zoukankan      html  css  js  c++  java
  • PAT (Advanced Level) Practice 1134 Vertex Cover (25分) (存边+标记点!!)

    1.题目

    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 10​4​​), 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 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

    2.题目分析

    将图中的所有边用struct记录,将待测试的点的大小用vector标记, 之后遍历图的边,如果边的两个点在vector中都未标记,则说明没有覆盖

    3.代码

    #include<iostream>
    #include<vector>
    using namespace std;
    struct node
    { 
    	int s, e;
    };
    vector<node>list;
    int main()
    {
    	int n, m, a, b, k, count;
    	scanf("%d %d", &n, &m);
    	for (int i = 0; i < m; i++)
    	{
    		scanf("%d %d", &a, &b);
    		list.push_back({ a,b });
    	}
    	scanf("%d", &k);
    	for (int i = 0; i < k; i++)
    	{
    		bool ok = true;
    		vector<int>mark;
    		mark.resize(m);
    		scanf("%d", &count);
    		for (int j = 0; j < count; j++)
    		{
    			scanf("%d", &a);
    			mark[a] = 1;
    		}
    		for (int s = 0; s < m; s++)
    			if (mark[list[s].e] == 0 && mark[list[s].s] == 0) { ok = false; break; }
    		if (ok)printf("Yes
    ");
    		else printf("No
    ");
    	}
    
    }
  • 相关阅读:
    Python heapq 模块的实现
    使用Python在2M内存中排序一百万个32位整数
    heapq
    将不确定变成确定~Uri文本文件不用浏览器自动打开,而是下载到本地
    说说设计模式~组合模式(Composite)
    JS~字符串长度判断,超出进行自动截取(支持中文)
    DDD~基础设施层~续
    谈谈设计模式~原型模式(Prototype)
    Study note for Continuous Probability Distributions
    Spring——AOP配置时的jar包异常
  • 原文地址:https://www.cnblogs.com/Jason66661010/p/12788872.html
Copyright © 2011-2022 走看看