当前位置:首页 >> 跨学科知识体系 >> 【PTA天梯赛CCCC -2017决赛L2-3】图着色问题 (25 分)(图染色),星号查看

【PTA天梯赛CCCC -2017决赛L2-3】图着色问题 (25 分)(图染色),星号查看

cpugpu芯片开发光刻机 跨学科知识体系 1
文件名:【PTA天梯赛CCCC -2017决赛L2-3】图着色问题 (25 分)(图染色),星号查看 【PTA天梯赛CCCC -2017决赛L2-3】图着色问题 (25 分)(图染色)

题干:

L2-3 图着色问题 (25 分)

图着色问题是一个著名的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 32 11 34 62 52 45 45 63 641 2 3 3 1 24 5 6 6 4 51 2 3 4 5 62 3 4 2 3 4 输出样例: YesYesNoNo

解题报告: 

     刚开始读错题了一直不知道这个K是干嘛用的,后来发现是能切只能用K个颜色,而不是1~K这些个颜色,,研究样例就慢慢读懂题意了。代码很简单,枚举每条边判断就可以了。

AC代码:

#include<bits/stdc++.h>#define pb push_backtypedef long long ll;using namespace std;const int MAX = 2e6 + 5;pair<int,int> p[MAX];int col[MAX];int main(){int n,m,k;cin>>n>>m>>k;for(int i = 1; i<=m; i++) {scanf("%d%d",&p[i].first,&p[i].second);}int q;cin>>q;while(q--) {int flag = 1;set<int> ss;for(int i = 1; i<=n; i++) {scanf("%d",&col[i]);ss.insert(col[i]);}if(ss.size() != k) flag = 0;if(flag == 1) {for(int i = 1; i<=m; i++) {if(col[p[i].first] == col[p[i].second]) {flag = 0;break;}}}if(flag) puts("Yes");else puts("No");}return 0 ;}

 

协助本站SEO优化一下,谢谢!
关键词不能为空
同类推荐
«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
文章归档
网站收藏
友情链接