题意:在一个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度图着色 (构造)相关推荐

  1. 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个点用 ...

  2. k图着色 局部搜索算法与模拟退火算法的python实现

    文章目录 前言 如何评价一个解? 通过计算出的冲突来找它的邻居解 数据的格式 局部搜索 概述 补充 代码 模拟退火 概述 补充 代码 总结以及不足之处 前言 这两种算法就不详细介绍了,流程思路比较简单 ...

  3. k图着色 遗传算法的简单python伪代码

    文章目录 概述 python伪代码 概述 该问题中所使用到的部分函数与知识与局部搜索.模拟退火中的相同,参照k图着色 局部搜索算法与模拟退火算法的python实现 遗传算法的整体思路比较简单,在解决图 ...

  4. uva 1613——K-Graph Oddity

    题意:输入n个点m条边的联通图,n为奇数,设k为最小的奇数,使得每个点的度数不超过k,要求把节点都涂上颜色,使得相邻节点颜色不一样. 思路:dfs.k的值为奇数,所以k为节点最大度数(+1).从当前节 ...

  5. 【牛客 - 185B】路径数量(离散数学,长度为k的路径数量,图)

    题干: 给出一个 n * n 的邻接矩阵A. A是一个01矩阵 . A[i][j]=1表示i号点和j号点之间有长度为1的边直接相连. 求出从 1 号点 到 n 号点长度为k的路径的数目. 输入描述: ...

  6. java k均值相异度计算_K-NN算法与K-Means算法的原理与区别(附带源码示例)

    KNN算法 K-Means算法 目标 确定某个元素所属的分类 将已存在的一系列元素分类 算法类别 监督的分类算法 无监督的聚类算法 数据区别 训练数据中,有明确的标签. 如:一个数据集中有几万张图片, ...

  7. u=q k 的交通流模型图 matlab,数学建模回归分析matlab版.ppt

    <数学建模回归分析matlab版.ppt>由会员分享,可在线阅读,更多相关<数学建模回归分析matlab版.ppt(51页珍藏版)>请在装配图网上搜索. 1.2020/11/2 ...

  8. matlab计算macd_matlab股市图k线 matlab画macd图

    我们在进行均线操盘时常会用到k线走势图以及分时图来综合的判断未来股市的趋势走向.以便于能够及时的做出相应的调整.我们在k线形态图已经明白怎么去做止盈.那么对于分时图而言,投资如何在这里面利用均价线做止 ...

  9. 从图(Graph)到图卷积(Graph Convolution):漫谈图神经网络 (二)

    在从图(Graph)到图卷积(Graph Convolution): 漫谈图神经网络 (一)中,我们简单介绍了基于循环图神经网络的两种重要模型,在本篇中,我们将着大量笔墨介绍图卷积神经网络中的卷积操作 ...

最新文章

  1. websocket+netty实时视频弹幕交互功能(Java版)
  2. mysql 权重搜索
  3. gRPC学习记录(二)--Hello World
  4. 【matplotlib】远程服务器使用报错 $DISPLAY
  5. jsp怎么调用servlet_Servlet简述
  6. 程序员常用字体(vs2008配色方案)
  7. 公司新来了个00后测试卷王,老油条表示是真干不过,已被……
  8. TextureMerger1.6.6 一:Egret MovieClip的制作和使用
  9. 解释python中的join()和split()函数_python 中join()函数strip() 函数和 split() 函数的详解及实例...
  10. 使用post访问不到接口_Postman调试依赖登录接口的3种方法
  11. PAIP.获取RSS全文输出.txt
  12. 【项目实战】课程管理系统(SpringBoot+mybatis-plus+Vue)
  13. 小白学 Python 数据分析(8):Pandas 数据透视表(pivot_table)
  14. OpenTCS打造移动机器人交通管制系统(四)
  15. java 几种生成海报的方式
  16. VS单解决方案多项目多DLL多exe管理
  17. 斩获 offer 的 Java 面试宝典
  18. linux 查看进程的流量监控,Linux如何监控每个进程所消耗流量
  19. 学生网课网页设计成品 在线视频学习类网页制作 三层结构网页模板 静态HTML注册登录网页模板 学生毕业设计网页制作作品 网校类网页代制做
  20. 北京公积金打印贷款证明(缴存明细+异地贷款职工缴存使用证明)

热门文章

  1. VTK:Rendering之Rainbow
  2. C ++定义QML类型
  3. OpenGL创建一个GLFW窗口的实例
  4. OpenGL合并转换
  5. C++ Bayes‘ theorem贝叶斯定理的实现算法(附完整源码)
  6. C语言常用13种算法附源码
  7. 29.类加载机制、类加载过程、加载、验证、准备、解析、初始化、总结
  8. [机器学习] ML重要概念:梯度(Gradient)与梯度下降法(Gradient Descent)
  9. 22 Python IO、打印到屏幕、读取键盘输入、打开和关闭文件、文件定位、重命名和删除文件、Python里的目录、文件,目录相关的方法
  10. FreeMarker整合Spring 3