P2819 图的m着色问题 洛谷
https://www.luogu.org/problem/show?pid=2819
题目背景
给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的。图的m着色问题是对于给定图G和m种颜色,找出所有不同的着色法。
题目描述
对于给定的无向连通图G和m种不同的颜色,编程计算图的所有不同的着色法。
输入输出格式
输入格式:
第1行有3个正整数n,k 和m,表示给定的图G有n个顶点和k条边,m种颜色。顶点编号为1,2,…,n。接下来的k行中,每行有2个正整数u,v,表示图G 的一条边(u,v)。
输出格式:
程序运行结束时,将计算出的不同的着色方案数输出。
输入输出样例
输入样例#1:
5 8 4
1 2
1 3
1 4
2 3
2 4
2 5
3 4
4 5
输出样例#1:
48
说明
n<=100;k<=2500;
在n很大时保证k足够大。
保证答案不超过20000。
#include <algorithm>
#include <iostream> using namespace std; int n,k,m,fx,fy,ans;
int color[];
int burn[][]; bool judge(int x,int col)
{
//枚举每个点的染色情况
for(int i=;i<=n;i++)
{
//不看当前点
if(x==i) continue;
//两个点首先要连接,如果颜色相同的话,那么就无法染编号为i的颜色
if(burn[x][i]==&&color[i]==col)
return ;
}
//两点不连接或者连到的点颜色不与编号为i的点的颜色相同,就可以染色
return ;
} void DFS(int now)
{
//如果当前染够了n个点,退出,找下一个方案;;
if(now==n+)
{
ans++;
return ;
}
//枚举可以染上的颜色的编号
for(int i=;i<=m;i++)
{
//如果当前的点没有染色,就判断它是否可以染编号为i的颜色
if(!color[now]&&(judge(now,i)))
{
//染上枚举到的颜色
color[now]=i;
//染下一个点
DFS(now+);
//如果始终无法染够n个点,或者完成了一种方案,回溯;;
color[now]=;
}
}
} int main()
{
cin>>n>>k>>m;
for(int i=;i<=k;i++)
{
cin>>fx>>fy;
//首先,把图建出来;;;
burn[fx][fy]=burn[fy][fx]=;
}
DFS();
//从第一个点开始找;;
cout<<ans;
return ;
}
带解析
无解析:
#include <algorithm>
#include <iostream> using namespace std; int n,k,m,fx,fy,ans;
int color[];
int burn[][]; bool judge(int x,int col)
{
for(int i=;i<=n;i++)
{
if(x==i) continue;
if(burn[x][i]==&&color[i]==col)
return ;
}
return ;
} void DFS(int now)
{
if(now==n+)
{
ans++;
return ;
}
for(int i=;i<=m;i++)
{
if(!color[now]&&(judge(now,i)))
{
color[now]=i;
DFS(now+);
color[now]=;
}
}
} int main()
{
cin>>n>>k>>m;
for(int i=;i<=k;i++)
{
cin>>fx>>fy;
burn[fx][fy]=burn[fy][fx]=;
}
DFS();
cout<<ans;
return ;
}
P2819 图的m着色问题 洛谷的更多相关文章
- 洛谷——P2819 图的m着色问题
P2819 图的m着色问题 题目背景 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的.图的 ...
- 洛谷 P2819 图的m着色问题
P2819 图的m着色问题 题目背景 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的.图的 ...
- P2819 图的m着色问题
题目背景 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的.图的m着色问题是对于给定图G和m ...
- P2819 图的m着色问题(DFS)
思路:最开始的回溯顺序是正常的图遍历的回溯顺序,其实也没有错.但是,因为怎么调都不对,看了题解.下面,请结合题解思路和代码一起感受一下回溯顺序的改变,算法的改变和代码在哪里实现了这种顺序. 回溯顺序: ...
- 网络流24题 第三题 - CodeVS1904 洛谷2764 最小路径覆盖问题 有向无环图最小路径覆盖 最大流 二分图匹配 匈牙利算法
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - CodeVS1904 题目传送门 - 洛谷2764 题意概括 给出一个有向无环图,现在请你求一些路径,这些路径 ...
- 【题解】洛谷P1073 [NOIP2009TG] 最优贸易(SPFA+分层图)
次元传送门:洛谷P1073 思路 一开始看题目嗅出了强连通分量的气息 但是嫌长没打 听机房做过的dalao说可以用分层图 从来没用过 就参考题解了解一下 因为每个城市可以走好几次 所以说我们可以在图上 ...
- 洛谷 P2656 (缩点 + DAG图上DP)
### 洛谷 P2656 题目链接 ### 题目大意: 小胖和ZYR要去ESQMS森林采蘑菇. ESQMS森林间有N个小树丛,M条小径,每条小径都是单向的,连接两个小树丛,上面都有一定数量的蘑菇.小胖 ...
- 洛谷 P7516 - [省选联考 2021 A/B 卷] 图函数(Floyd)
洛谷题面传送门 一道需要发现一些简单的性质的中档题(不过可能这道题放在省选 D1T3 中偏简单了?) u1s1 现在已经是 \(1\text{s}\) \(10^9\) 的时代了吗?落伍了落伍了/ ...
- 动态规划 洛谷P4017 最大食物链计数——图上动态规划 拓扑排序
洛谷P4017 最大食物链计数 这是洛谷一题普及/提高-的题目,也是我第一次做的一题 图上动态规划/拓扑排序 ,我认为这题是很好的学习拓扑排序的题目. 在这题中,我学到了几个名词,入度,出度,及没有环 ...
随机推荐
- AJPFX总结final、finally、finallize的区别
final.finally.finallize有何区别? final表示一个修饰符,如果用它来修饰一个类,则该类是不能继承的:如果用它来修饰一个变量,则该变量一旦赋值之后就不能再修改:如果用它来 ...
- CF940D Alena And The Heater
思路: 模拟. 实现: #include <bits/stdc++.h> using namespace std; const int INF = 1e9; ], n; string b; ...
- 【C++】模板简述(二):函数模板
我们上文讲了,模板的引入,我们发现在某种特殊的情况下,必须得通过模板才能完美的解决问题. 本文就来简述一下函数模板的基本使用. 一.函数模板格式 template<typename Param1 ...
- ubuntu下pycharm无法使用pip安装python包的修复方案
1. 在pycharm 中安装python包会报错“pycharm ModuleNotFoundError: No module named 'distutils.core'”: 2. 可能原因:in ...
- leetcode_1014. Capacity To Ship Packages Within D Days
https://leetcode.com/problems/capacity-to-ship-packages-within-d-days/ 传送带要在D天内把所有货物传送完,但是传送带每天有传送容量 ...
- swift 即使不使用oc的动态派发机制也应该借鉴isa类型识别机制
目前的消息派发机制真的很鸡肋. 简直是一堆狗屎. 类型信息中包含所有需要动态派发的函数:这个包含两类:类和protocol: 在编译时,首先搜索动态派发列表: 动态派发列表没有,在搜索静态派发列表: ...
- 6-Java-C(打印大X)
题目描述: 小明希望用星号拼凑,打印出一个大X,他要求能够控制笔画的宽度和整个字的高度. 为了便于比对空格,所有的空白位置都以句点符来代替. 要求输入两个整数m n,表示笔的宽度,X的高度.用空格分开 ...
- 引入msword
找到解决方法了:不是直接引入mswork.tlh文件的,该文件是#import "C:\\Program Files\\Microsoft Office\\Office12\\MSWORD. ...
- gym100825G. Tray Bien(轮廓线DP)
题意:3 * N的格子 有一些点是坏的 用1X1和1X2的砖铺有多少种方法 题解:重新学了下轮廓线 写的很舒服 #include <bits/stdc++.h> using namespa ...
- 使用Java(Jedis)链接redis报java.net.ConnectException: Connection refused: connect的错误
redis环境:centos6 java代码运行环境:windows 第一种情况:未开启redis服务. redis-server /myredis/redis.conf (写你的redis配置文件的 ...