首页 > 编程语言 >L2-023 图着色问题(25分) c++代码

L2-023 图着色问题(25分) c++代码

时间:2024-03-25 12:30:41浏览次数:29  
标签:25 着色 颜色 int c++ a1 a2 L2 include

还是别把问题想复杂了。。

图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色?

但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。

输入格式:

输入在第一行给出3个整数V(0<V≤500)、E(≥0)和K(0<K≤V),分别是无向图的顶点数、边数、以及颜色数。顶点和颜色都从1到V编号。随后E行,每行给出一条边的两个端点的编号。在图的信息给出之后,给出了一个正整数N(≤20),是待检查的颜色分配方案的个数。随后N行,每行顺次给出V个顶点的颜色(第i个数字表示第i个顶点的颜色),数字间以空格分隔。题目保证给定的无向图是合法的(即不存在自回路和重边)。

输出格式:

对每种颜色分配方案,如果是图着色问题的一个解则输出Yes,否则输出No,每句占一行。

输入样例:

6 8 3
2 1
1 3
4 6
2 5
2 4
5 4
5 6
3 6
4
1 2 3 3 1 2
4 5 6 6 4 5
1 2 3 4 5 6
2 3 4 2 3 4

输出样例:

Yes
Yes
No
No

代码: 

//#include<iostream>
//#include<cstring>
//#include<cmath>
//#include<algorithm>
//#include<ctype.h>
//#include<stdio.h>
//#include<map>
#include<bits/stdc++.h>
using namespace std;

vector<int> g[505];//图
int color[505]={0};//顶点的颜色

bool check(int p){
	for(int i=0;i<(int)g[p].size();i++){
		if(color[g[p][i]]==color[p]) return false;
	}
	return true;
}
int main(){
	int v,e,k;//顶点数,边数,颜色数 
	cin>>v>>e>>k;
	int a1,a2;//边的俩顶点 
	while(e--){
		cin>>a1>>a2;
		g[a1].push_back(a2);
		//g[a2].push_back(a1);
	}
	int n;
	int f;
	cin>>n;
	while(n--){
		set<int> cc;//颜色标记
		f=1;
		for(int i=1;i<=v;i++){
			cin>>color[i];
			cc.insert(color[i]);
		}
		if((int)cc.size()!=k) cout<<"No"<<endl;
		else{
			for(int i=1;i<=v;i++){
				if(!check(i)){
					f=0;
					cout<<"No"<<endl;
					break;
				}
			}
			if(f==1) cout<<"Yes"<<endl;
		}
	}
	return 0;
}

 

标签:25,着色,颜色,int,c++,a1,a2,L2,include
From: https://blog.csdn.net/REIDIO/article/details/137008744

相关文章

  • L2-021 点赞狂魔(25分) c++代码
    微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。然而有这么一种人,他们会通过给自己看到的一切内容点赞来狂刷存在感,这种人就被称为“点赞狂魔”。他们点赞的标签非常分散,无法体现出明......
  • L2-022 重排链表(25分) c++代码
    给定一个单链表 L1​→L2​→⋯→Ln−1​→Ln​,请编写程序将链表重新排列为 Ln​→L1​→Ln−1​→L2​→⋯。例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3。输入格式:每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (......
  • Base64编解码及C++代码实现
    1.Base64是什么?        Base64是一种二进制到文本的编码方式。如果要更具体一点的话,可以认为它是一种将byte数组编码为字符串的方法,而且编码出的字符串只包含ASCII基础字符。        例如字符串mickey0380对应的Base64为bWlja2V5MDM4MA==。其中那个=......
  • C++ | 剪枝(DFS)lanqiao OJ 2942
     上一篇我们已经分享了DFS的学习,剪枝相当于对部分DFS进行优化正常用DFS写,会遍历每一种情况,因此要判断他的合法性,并且在第十个检测点会超时,用剪枝后,这道题就可以过啦。//不剪枝的方法#include<bits/stdc++.h>usingnamespacestd;constintN=15;inta[N],n;v......
  • C++类的构造函数和析构函数
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录1.构造函数(Constructor)2.析构函数(Destructor):3.构造函数与析构函数的调用顺序:4.注意事项:5.示例总结1.构造函数(Constructor)**定义:**构造函数是一种特殊的成员函数,用于在创建对象时初始化......
  • Oracle-12541无监听或者链接一直未响应
    近日Oracle服务器断电重启后服务挂了,现记录下主要的修复步骤1.检查磁盘空寂是否股够df-h2.服务挂载并启动服务器登录oracle帐号依次输入下列命令:sqlplus /assysdbashutdownimmedicatestartup3.服务启动测试退出linux终端,重新打开登陆sqlplus输入帐号/秘密:system......
  • C++开发基础——类对象与构造析构
    一、基础概念类:用户自定义的数据类型。对象:类类型的变量,类的实例。类的成员:成员变量和成员函数。成员变量:类中定义的变量。成员函数:类中定义的函数。定义类的代码样例:classClassName{//members};//类定义的右花括号后面必须有分号类的访问修饰符:public、private......
  • C++开发基础——指针与引用
    一,关于指针1.指针的基础概念指针是可存储地址的变量,存储在指针中的地址可以是变量或者其他数据的地址。指针不仅仅是指向某地址,指针还关注指向该地址的数据类型。例如:long*num_ptr{};这里的num_ptr指针今后只能存储long类型的变量地址,尝试用它存储非long类型的变量地址......
  • C/C++练习
    1.数组升序#include<iostream>usingnamespacestd;//冒泡排序voidbubbleSort(int*arr,intlen){ for(inti=0;i<len-1;i++){ for(intj=0;j<len-1-i;j++){ if(arr[j]>arr[j+1]){ inttmp=arr[j]; arr[j]=arr[j+......
  • C++ 类的内存分配是怎么样的?
    dynamic_memory首先通过一段代码来引入动态内存分配的主题。一个名为StringBad的类以及一个功能更强大的String类。#include<iostream>#ifndefSTRNGBAD_H_#defineSTRNGBAD_H_classStringBad{private: char*str; intlen; staticintnum_strings;public: StringB......