【题解】图的m着色问题
题目背景
给定无向连通图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)。
输出格式
程序运行结束时,将计算出的不同的着色方案数输出。
输入样例
5 8 4
1 2
1 3
1 4
2 3
2 4
2 5
3 4
4 5
输出样例
48
说明
n<=100;k<=2500;
在n很大时保证k足够大。
保证答案不超过20000。
题解
别的剪枝不多说了。在这一题中,我们要搜索的起点其实只用搜一种颜色,最后输出的时候再乘上$m$即可(乘法原理)。
#include <iostream> #define MAX_N (100 + 5)
#define MAX_K (2500 + 5)
#define MAX_M (2500 + 5) using namespace std; struct Edge
{
int to;
int next;
}; int n, k, m;
int h[MAX_N], tot;
Edge e[MAX_K + MAX_K];
int c[MAX_N][MAX_M];
int ans; inline void Add_Edge(int u, int v)
{
e[++tot].to = v;
e[tot].next = h[u];
h[u] = tot;
return;
} void DFS(int u)
{
if(u > n)
{
++ans;
return;
}
for(register int i = ; i <= m; ++i)
{
if(c[u][i]) continue;
for(register int j = h[u]; j; j = e[j].next)
{
++c[e[j].to][i];
}
DFS(u + );
for(register int j = h[u]; j; j = e[j].next)
{
--c[e[j].to][i];
}
}
return;
} int main()
{
cin >> n >> k >> m;
int u, v;
for(register int i = ; i <= k; ++i)
{
cin >> u >> v;
Add_Edge(u, v);
Add_Edge(v, u);
}
for(register int i = h[]; i; i = e[i].next)
{
++c[e[i].to][];
}
DFS();
cout << ans * m;
return ;
}
参考程序
【题解】图的m着色问题的更多相关文章
- [题解]图的m着色问题
图的m着色问题(color) [题目描述] 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的 ...
- 【回溯】图的m着色问题
问题 C: [回溯]图的m着色问题 时间限制: 1 Sec 内存限制: 128 MB提交: 1 解决: 1[提交][状态][讨论版] 题目描述 给定无向连通图G=(V, E)和m种不同的颜色,用这 ...
- 编程之美:1.9高效率安排见面会 图的m着色问题 回溯法
原书问题,可以转换为图的m着色问题 ,下面该问题的代码 这里有参考ppt与code,免积分载 http://download.csdn.net/detail/u011467621/6341195 // ...
- 图的M 着色问题
题目描述给定无向连通图G 和M 种不同的颜色,用这些颜色为图G 的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G 中每条边的2 个顶点着不同的颜色,则称这个图是M 可着色的.图的M 着色问题是对 ...
- P2819 图的m着色问题
题目背景 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的.图的m着色问题是对于给定图G和m ...
- 图m的着色问题(搜索)
图的m着色问题 [问题描述] 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的 ...
- 图的m着色问题 (回溯搜索)
图的m着色问题 [问题描述] 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的 ...
- 算法java实现--回溯法--图的m着色问题
(转自:http://blog.csdn.net/lican19911221/article/details/26264471) 图的m着色问题的Java实现(回溯法) 具体问题描述以及C/C++实现 ...
- 洛谷——P2819 图的m着色问题
P2819 图的m着色问题 题目背景 给定无向连通图G和m种不同的颜色.用这些颜色为图G的各顶点着色,每个顶点着一种颜色.如果有一种着色法使G中每条边的2个顶点着不同颜色,则称这个图是m可着色的.图的 ...
随机推荐
- 74.Maximal Rectangle(数组中的最大矩阵)
Level: Hard 题目描述: Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle con ...
- XSS——跨站脚本攻击
跨站点脚本攻击:通过对网页注入恶意脚本,成功地被浏览器执行,来达到攻击的目的. 一.XSS攻击类型与原理1. 反射型XSS攻击非持久性攻击,黑客使用社交性的交互技巧诱导用户点击访问目标服务器的链接,但 ...
- git 常用命令与上传步骤
git 上传步骤: git init 初始化Git仓库 git add . 提交你修改的文件 git status 查看项目当中的状态(红色代表的是 未add 的文件 绿色的是已 ...
- webstorm2018
1.安装后修改hosts: windows\system32\drivers\etc 管理员权限修改 0.0.0.0 account.jetbrains.com 2. 选择activation c ...
- rabbitmq3.7集群搭建实战
环境: 3台 centos7.4rabbitmq3.7erlang 22 1. 有几种方式安装,这里使用的yum安装(官方推荐)2. 使用rabbitmq时需要安装erlang,在各个节点上使用vim ...
- Codeforces Round #420 (Div. 2) - B
题目链接:http://codeforces.com/contest/821/problem/B 题意:二维每个整点坐标(x,y)拥有的香蕉数量为x+y,现在给你一个直线方程的m和b参数,让你找一个位 ...
- pwn的一些技巧与总结
原文地址:https://github.com/Naetw/CTF-pwn-tips 目录 溢出 在gdb中寻找字符串 二进制服务 找到libc中特定函数的偏移地址 Find '/bin/sh' or ...
- 3.VUE前端框架学习记录三:Vue组件化编码1
VUE前端框架学习记录三:Vue组件化编码1文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...
- bzoj4182 Shopping 点分治+单调队列优化多重背包
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=4182 题解 有一个很直观的想法是设 \(dp[x][i]\) 表示在以 \(x\) 为根的子树 ...
- 4G手机网络通信是如何被黑客远程劫持的?
你的4G手机网络通信是如何被黑客远程劫持的?如果您的移动运营商提供LTE(也称为4G网络),则需要小心,因为您的网络通信可能会被远程劫持. 中国一组研究人员发现了无处不在的LTE移动设备标准中的一些关 ...