PAT Advanced 1134 Vertex Cover (25) [hash散列]
题目
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. Afer 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
题目分析
给出图的每条边顶点信息,给出几组顶点集合,判断顶点集合是否是vertex cover(vertex cover指:一个顶点集合,图每条边的顶点至少有一个在这个顶点集合中)
解题思路
算法 1
- 定义顶点结构体edge,两个顶点left,right
- 定义vector v,存放图每条边的信息
- 定义int ves[N],存放每个查询顶点集合中顶点出现次数
- 每个顶点集合的判断,需要遍历所有边信息
- 每条边的两个顶点至少有一个在顶点集合中,满足条件,打印Yes
- 只要有一条边的两个顶点都不在顶点集合中,不满足条件,打印No
算法2
- 定义一个vector数组,数组下标表示顶点,vector中存放的是该顶点所在边的编号
- 每次校验一个顶点集合,定义一个int hash[M]数组,下标为图的边,值为边的顶点是否至少有一个在顶点集合中,若边满足条件置为1
- 遍历hash[M]数组,是否所有元素都为1,表示每条边至少有一个顶点在顶点集合中,该顶点集合是vertex cover
Code
Code 01(算法1 最优)
#include <iostream>
#include <vector>
using namespace std;
struct edge {
int left,right;
};
int main(int argc,char * argv[]) {
int N,M,K,L,V;
scanf("%d %d", &N,&M);
edge es[M];
for(int i=0; i<M; i++) {
scanf("%d %d",&es[i].left,&es[i].right);
}
scanf("%d",&K);
for(int i=0; i<K; i++) {
scanf("%d", &L);
int ves[N]= {0};
for(int j=0; j<L; j++) {
scanf("%d",&V);
ves[V]++;
}
int j;
for(j=0; j<M; j++) {
if(ves[es[j].left]==0&&ves[es[j].right]==0)break;
}
if(j!=M)printf("No\n");
else printf("Yes\n");
}
return 0;
}
Code 02(算法2)
#include <iostream>
#include <vector>
using namespace std;
int main(int argc,char * argv[]) {
int N,M,K,L,V;
scanf("%d %d", &N,&M);
vector<int> es[N];
int f,r;
for(int i=0; i<M; i++) {
scanf("%d %d",&f,&r);
es[f].push_back(i);
es[r].push_back(i);
}
scanf("%d",&K);
for(int i=0; i<K; i++) {
scanf("%d", &L);
int hash[M]= {0};
for(int j=0; j<L; j++) {
scanf("%d",&V);
for(int t=0; t<es[V].size(); t++) {
hash[es[V][t]]=1;
}
}
int j;
for(j=0; j<M; j++) {
if(hash[j]==0) {
break;
}
}
if(j!=M)printf("No\n");
else printf("Yes\n");
}
return 0;
}
PAT Advanced 1134 Vertex Cover (25) [hash散列]的更多相关文章
- PAT Advanced 1048 Find Coins (25) [Hash散列]
题目 Eva loves to collect coins from all over the universe, including some other planets like Mars. On ...
- PAT Advanced 1084 Broken Keyboard (20) [Hash散列]
题目 On a broken keyboard, some of the keys are worn out. So when you type some sentences, the charact ...
- PAT Advanced 1050 String Subtraction (20) [Hash散列]
题目 Given two strings S1 and S2, S = S1 – S2 is defined to be the remaining string afer taking all th ...
- PAT Advanced 1041 Be Unique (20) [Hash散列]
题目 Being unique is so important to people on Mars that even their lottery is designed in a unique wa ...
- PAT甲级——1134 Vertex Cover (25 分)
1134 Vertex Cover (考察散列查找,比较水~) 我先在CSDN上发布的该文章,排版稍好https://blog.csdn.net/weixin_44385565/article/det ...
- PAT 甲级 1134 Vertex Cover
https://pintia.cn/problem-sets/994805342720868352/problems/994805346428633088 A vertex cover of a gr ...
- 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 le ...
- PAT Advanced 1154 Vertex Coloring (25) [set,hash]
题目 A proper vertex coloring is a labeling of the graph's vertices with colors such that no two verti ...
- PAT甲题题解-1078. Hashing (25)-hash散列
二次方探测解决冲突一开始理解错了,难怪一直WA.先寻找key%TSize的index处,如果冲突,那么依此寻找(key+j*j)%TSize的位置,j=1~TSize-1如果都没有空位,则输出'-' ...
随机推荐
- 十四、SAP中定义自定义变量
一.利用关键字TYPE定义类型,然后在定义此类型的变量,代码如下: 二.效果如下:
- RabbitMQ消息队列帮助类
调用 //消息队列发消息 MqConfigInfo config = new MqConfigInfo(); config.MQExChange = "DrawingOutput" ...
- 【CF1154G】Minimum Possible LCM
题意 给你 \(n\) 个数 \(a_i\) ,求出 \(\text{lcm}\) 最小的一对数. \(n\le 10^6, a_i\le 10^7\) 题解 直接枚举 ,找到当前数最小的两个倍数,统 ...
- springboot - 映射HTTP Response Status Codes 到 静态 HTML页面
1.总览 2.代码 1).pom.xml <dependencies> <dependency> <groupId>org.springframework.boot ...
- 转载:HTTP 请求头中的 X-Forwarded-For,X-Real-IP
转载:https://www.cnblogs.com/diaosir/p/6890825.html X-Forwarded-For 在使用nginx做反向代理时,我们为了记录整个的代理过程,我们往往 ...
- SMPL模型Shape和Pose参数
两部分 1.Pose参数 2.Shape参数 一 Pose参数 共24个关节点,对应idx从0到23,图中3个小图分别表示zero shape只有idx节点分别绕x/y/z轴旋转. 其中蓝色线表示-p ...
- 【Vue中的坑】vue项目中动态绑定src不显示图片解决方法
v-for绑定src的数据如下: data() { return { img_src:"../../assets/images/mirror-service.png" } } 渲染 ...
- Day2-T4
原题目 当然这是原题+,要输路径的.所以必须DFS. Describe:DP or DFS code: #include<bits/stdc++.h> using namespace st ...
- 一个简单完整的promiseDemo
想要完全理解代码,需要理解 this 和闭包的含义. Promise是什么 简单来说,Promise 主要就是为了解决异步回调的问题.用 Promise 来处理异步回调使得代码层次清晰,便于理解,且更 ...
- Python操作APP -- Appium-Python-Client
Appium连接模拟器 pip install Appium-Python-Client 使用Appium定位或者使用辅助定位工具 SDK安装目录/tools/bin,双击此辅助定位工具 from a ...