UVA 1613 K-Graph Oddity K度图着色 (构造)
题意:在一个n个点的无向连通图中,n是奇数,k是使得所有点的度数不超过k的最小奇数,询问一种染色方案,使得相邻点的颜色不同。
题解:一个点和周围的点的颜色数加起来最大为它的度数+1;如果最大度数是偶数,那么k种颜色一定够了。如果最大度数是奇数,而且n是奇数,那么k种颜色也一定是足够的。 可以反证,最大度数的点是u,deg[u]是奇数,而且和u相邻的点颜色各不相同,那么与u的一个相邻点v,至少和deg[u]个颜色不同的点相邻,这样构造出来连通图点数一定是偶数,和n是奇数是矛盾的,所以不会出现颜色数为deg[u]+1的情况。
所以只要染色就好了。
#include<bits/stdc++.h> using namespace std; const int maxn = 1e4; const int maxm = 2e5+5;int head[maxn],to[maxm],nxt[maxm],col[maxn],ecnt,deg[maxn]; int vis[maxn];void addEdge(int u,int v) {deg[u]++;to[ecnt] = v;nxt[ecnt] = head[u];head[u] = ecnt++; } int k;void dfs(int u) {for(int i = head[u]; ~i; i= nxt[i]){vis[col[to[i]]] = u;}for(int i = 1; i <= k; i++) if(vis[i] != u) { col[u] = i; break; }for(int i = head[u]; ~i; i= nxt[i]){if(col[to[i]]) continue;dfs(to[i]);} }int main() {//freopen("in.txt","r",stdin);int n,m;while(~scanf("%d",&n)){scanf("%d",&m);memset(head+1,-1,sizeof(int)*n);memset(deg+1,0,sizeof(int)*n);memset(col+1,0,sizeof(int)*n);ecnt = 0;while(m--){int u,v;scanf("%d %d",&u,&v);addEdge(u,v); addEdge(v,u);}k = (*max_element(deg+1,deg+1+n))|1;memset(vis+1,0,sizeof(int)*k);dfs(1);printf("%d\n",k);for(int i = 1; i <= n; i++) printf("%d\n",col[i]);putchar('\n');}return 0; }
转载于:https://www.cnblogs.com/jerryRey/p/4702323.html
UVA 1613 K-Graph Oddity K度图着色 (构造)相关推荐
- Educational Codeforces Round 45 (Rated for Div. 2) D Graph And Its Complement(图的构造)
题意:构造一个图,使这个图的连通分量有a个,其补图的连通分量有b个,输出邻接矩阵 可以推出当min(a,b)!=1时输出no a=b=1且n=2或者n=3时也为no 其余只要把一个连通分量里的x个点用 ...
- k图着色 局部搜索算法与模拟退火算法的python实现
文章目录 前言 如何评价一个解? 通过计算出的冲突来找它的邻居解 数据的格式 局部搜索 概述 补充 代码 模拟退火 概述 补充 代码 总结以及不足之处 前言 这两种算法就不详细介绍了,流程思路比较简单 ...
- k图着色 遗传算法的简单python伪代码
文章目录 概述 python伪代码 概述 该问题中所使用到的部分函数与知识与局部搜索.模拟退火中的相同,参照k图着色 局部搜索算法与模拟退火算法的python实现 遗传算法的整体思路比较简单,在解决图 ...
- uva 1613——K-Graph Oddity
题意:输入n个点m条边的联通图,n为奇数,设k为最小的奇数,使得每个点的度数不超过k,要求把节点都涂上颜色,使得相邻节点颜色不一样. 思路:dfs.k的值为奇数,所以k为节点最大度数(+1).从当前节 ...
- 【牛客 - 185B】路径数量(离散数学,长度为k的路径数量,图)
题干: 给出一个 n * n 的邻接矩阵A. A是一个01矩阵 . A[i][j]=1表示i号点和j号点之间有长度为1的边直接相连. 求出从 1 号点 到 n 号点长度为k的路径的数目. 输入描述: ...
- java k均值相异度计算_K-NN算法与K-Means算法的原理与区别(附带源码示例)
KNN算法 K-Means算法 目标 确定某个元素所属的分类 将已存在的一系列元素分类 算法类别 监督的分类算法 无监督的聚类算法 数据区别 训练数据中,有明确的标签. 如:一个数据集中有几万张图片, ...
- u=q k 的交通流模型图 matlab,数学建模回归分析matlab版.ppt
<数学建模回归分析matlab版.ppt>由会员分享,可在线阅读,更多相关<数学建模回归分析matlab版.ppt(51页珍藏版)>请在装配图网上搜索. 1.2020/11/2 ...
- matlab计算macd_matlab股市图k线 matlab画macd图
我们在进行均线操盘时常会用到k线走势图以及分时图来综合的判断未来股市的趋势走向.以便于能够及时的做出相应的调整.我们在k线形态图已经明白怎么去做止盈.那么对于分时图而言,投资如何在这里面利用均价线做止 ...
- 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络 (二)
在从图(Graph)到图卷积(Graph Convolution): 漫谈图神经网络 (一)中,我们简单介绍了基于循环图神经网络的两种重要模型,在本篇中,我们将着大量笔墨介绍图卷积神经网络中的卷积操作 ...
最新文章
- websocket+netty实时视频弹幕交互功能(Java版)
- mysql 权重搜索
- gRPC学习记录(二)--Hello World
- 【matplotlib】远程服务器使用报错 $DISPLAY
- jsp怎么调用servlet_Servlet简述
- 程序员常用字体(vs2008配色方案)
- 公司新来了个00后测试卷王,老油条表示是真干不过,已被……
- TextureMerger1.6.6 一:Egret MovieClip的制作和使用
- 解释python中的join()和split()函数_python 中join()函数strip() 函数和 split() 函数的详解及实例...
- 使用post访问不到接口_Postman调试依赖登录接口的3种方法
- PAIP.获取RSS全文输出.txt
- 【项目实战】课程管理系统(SpringBoot+mybatis-plus+Vue)
- 小白学 Python 数据分析(8):Pandas 数据透视表(pivot_table)
- OpenTCS打造移动机器人交通管制系统(四)
- java 几种生成海报的方式
- VS单解决方案多项目多DLL多exe管理
- 斩获 offer 的 Java 面试宝典
- linux 查看进程的流量监控,Linux如何监控每个进程所消耗流量
- 学生网课网页设计成品 在线视频学习类网页制作 三层结构网页模板 静态HTML注册登录网页模板 学生毕业设计网页制作作品 网校类网页代制做
- 北京公积金打印贷款证明(缴存明细+异地贷款职工缴存使用证明)
热门文章
- VTK:Rendering之Rainbow
- C ++定义QML类型
- OpenGL创建一个GLFW窗口的实例
- OpenGL合并转换
- C++ Bayes‘ theorem贝叶斯定理的实现算法(附完整源码)
- C语言常用13种算法附源码
- 29.类加载机制、类加载过程、加载、验证、准备、解析、初始化、总结
- [机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)
- 22 Python IO、打印到屏幕、读取键盘输入、打开和关闭文件、文件定位、重命名和删除文件、Python里的目录、文件,目录相关的方法
- FreeMarker整合Spring 3