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 vertices sharing the same edge have the same color. A coloring using at most k colors is called a (proper) k-coloring. Now you are supposed to tell if a given coloring is a proper k-coloring.
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 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 colorings you are supposed to check. Then K lines follow, each contains N colors which are represented by non-negative integers in the range of int. The i-th color is the color of the i-th vertex.
Output Specification:
For each coloring, print in a line k-coloring if it is a proper k-coloring for some positive k, 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
4
0 1 0 1 4 1 0 1 3 0
0 1 0 1 4 1 0 1 0 0
8 1 0 1 4 1 0 5 3 0
1 2 3 4 5 6 7 8 8 9
Sample Output:
4-coloring
No
6-coloring
No
题目分析
已知图每条边的顶点信息,查询已知条件为图每个顶点的颜色。要求在查询已知条件下图每条边两个顶点颜色不同,满足条件条件输出K-coloring(K为颜色数),否则输出No
解题思路
- 定义结构体edge,记录每条边两个顶点的数字
- 定义edge es[M],记录所有边的顶点信息
- 定义int acs[N],记录每个查询条件中每个顶点的颜色;set cs,记录每个查询条件颜色数
- 遍历所有边,验证查询条件每个顶点的颜色是否满足每条边两个顶点颜色不同
知识点
- 局部定义bool flag;
局部循环中定义bool flag,某次循环将flag=true后,下一次循环执行到bool flag,并不会将flag重新初始化为false,而是使用上一次循环执行的结果 - set
set<int> s1; //初始化
s1.insert(10); //插入
//set<int>::iterator pos = s1.find(30); if (pos != s1.end()){//可找到} //查找
//int num = s1.count(30); //统计
Code
Code 01
#include <iostream>
#include <set>
using namespace std;
struct edge {
int left,right;
};
int main(int argc,char * argv[]) {
int N,M,K,T;
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++) {
int acs[N] = {0};
set<int> cs;
for(int j=0;j<N;j++){
scanf("%d",&acs[j]);
cs.insert(acs[j]);
}
int j;
for(j=0;j<M;j++){
if(acs[es[j].left]==acs[es[j].right])break;
}
if(j==M)printf("%d-coloring\n",cs.size());
else printf("No\n");
}
return 0;
}
Code 02
#include <iostream>
#include <set>
using namespace std;
struct edge {
int left,right;
};
int main(int argc,char * argv[]) {
int N,M,K,T;
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++) {
int acs[N] = {0};
set<int> cs;
for(int j=0;j<N;j++){
scanf("%d",&acs[j]);
cs.insert(acs[j]);
}
bool flag=false;// 如果不写=false;初始化是false,但是之后的循环,并不会重置为false,而依旧使用的是上一次循环处理结束的值
for(int j=0;j<M;j++){
if(acs[es[j].left]==acs[es[j].right]){
flag = true;
break;
}
}
if(!flag)printf("%d-coloring\n",cs.size());
else printf("No\n");
}
return 0;
}
PAT Advanced 1154 Vertex Coloring (25) [set,hash]的更多相关文章
- PAT Advanced 1154 Vertex Coloring (25 分)
A proper vertex coloring is a labeling of the graph's vertices with colors such that no two vertices ...
- pat甲级 1154 Vertex Coloring (25 分)
A proper vertex coloring is a labeling of the graph's vertices with colors such that no two vertices ...
- PAT 甲级 1154 Vertex Coloring
https://pintia.cn/problem-sets/994805342720868352/problems/1071785301894295552 A proper vertex color ...
- 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 ...
- PTA 1154 Vertex Coloring
题目链接:1154 Vertex Coloring A proper vertex coloring is a labeling of the graph's vertices with colors ...
- 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 1020 Tree Traversals (25 分)
1020 Tree Traversals (25 分) Suppose that all the keys in a binary tree are distinct positive integ ...
- PAT (Advanced Level) 1078. Hashing (25)
二次探测法.表示第一次听说这东西... #include<cstdio> #include<cstring> #include<cmath> #include< ...
- PAT (Advanced Level) 1070. Mooncake (25)
简单贪心.先买性价比高的. #include<cstdio> #include<cstring> #include<cmath> #include<vecto ...
随机推荐
- 二十六、JavaScript之查找子字符串substring和slice和substr
一.代码如下 二.效果如下 <!DOCTYPE html> <html> <meta http-equiv="Content-Type" conten ...
- 如何有效避免Essay写作抄袭
每到学期末的时候,各种考试,论文以及作业数不胜数,压得留学党们快要喘不过气了.我想比起写论文,同学们更操心的问题应该是:Plagiarism.要知道在国外Plagiarism的这种行为在学术中是零容忍 ...
- C#编码习惯2
1.一定要用大括号括住流程控制元素,如for,while,if,switch内嵌的代码,即便只包含一行代码. 2.如果语句中有else if,一定要有一个else跟着最后一个else if. 3.只要 ...
- 实验吧-隐写术-男神一般都很低调很低调的!!(stegsolve->Image Combiner + DES加密)
先介绍一下DES加密:(也可参考https://blog.csdn.net/zz_Caleb/article/details/87016017,第14个) 1)对称加密,参考:对称加密和非对称加密 2 ...
- opencv+python+dlib人脸关键点检测、实时检测
安装的是anaconde3.python3.7.3,3.7环境安装dlib太麻烦, 在anaconde3中新建环境python3.6.8, 在3.6环境下安装dlib-19.6.1-cp36-cp36 ...
- Inception Score
转载 https://www.jiqizhixin.com/articles/2019-01-10-18 全面解析Inception Score原理及其局限性 https://blog.csdn ...
- 前端第三篇---前端基础之JavaScript
前端第三篇---前端基础之JavaScript 一.JavaScript概述 二.JavaScript的基础 三.词法分析 四.JavaScript的内置对象和方法 五.BOM对象 六.DOM对象 七 ...
- php条件判断(9.29 第十五天)
超级全局变量:$GLOBALS //包含全部变量的全局组合数组$_SERVER //包含请求头中的信息,用户的IP.用户的UA.头信息$_REQUEST //包含用户提交的所有数据(POST/GET ...
- 基于Ambari Server部署HDP集群实战案例
基于Ambari Server部署HDP集群实战案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.部署Ambari Server端 博主推荐阅读: https://www.c ...
- P 1034 有理数四则运算
转跳点: