题意;

  在一个n个点的无向连通图中,n是奇数,k是使得所有点的度数不超过k的最小奇数,询问一种染色方案,使得相邻点的颜色不同。

分析:

  k=所有点中最大的入度。如果最大入度是偶数,则k+1。每个点可选择的颜色是k-他的入度。之后进行染色。先从可选择颜色少的点进行染色,这样最后一个点一定有颜色可以染。

代码:

  

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
int n,m;
int k;
int vis[10010];
int color[10010];
vector<int>g[10010];
int main()
{
while(~scanf("%d%d",&n,&m))
{
int i,j;
for(i=1;i<=n;i++)
{
g[i].clear();
}
memset(vis,0,sizeof(vis));
memset(color,0,sizeof(color));
int maxd=0;
for(i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
vis[x]++;
vis[y]++;
g[x].push_back(y);
g[y].push_back(x);
maxd=max(max(vis[x],vis[y]),maxd);
}
if(maxd%2==0)
k=maxd+1;
else
k=maxd;
for(i=1;i<=n;i++)
{
vis[i]=k-vis[i];
}
for(i=1;i<=n;i++)
{
int p;
int min_degree=20000;
for(j=1;j<=n;j++)
{
if(color[j]==0&&min_degree>vis[j])
{
min_degree=vis[j];
p=j;
}
}
int map[10010];
memset(map,0,sizeof(map));
for(j=0;j<g[p].size();j++)
{
if(color[g[p][j]]!=0)
map[color[g[p][j]]]=1;
}
for(j=1;j<=k;j++)
{
if(map[j]==0)
{
color[p]=j;
break;
}
}
for(j=0;j<g[p].size();j++)
{
if(color[g[p][j]]==0)
{
vis[g[p][j]]--;
}
}
}
printf("%d\n",k);
for(i=1;i<=n;i++)
printf("%d\n",color[i]);
printf("\n");
}
}

UVA 1613 K-Graph Oddity的更多相关文章

  1. UVA 1613 K度图染色

    题目 \(dfs+\)证明. 对于题目描述,可以发现\(K\)其实就是大于等于原图中最大度数的最小奇数,因为如果原图度数最大为奇数,则最多颜色肯定为K,而如果原图最大度数为偶数,则\(K\)又是奇数, ...

  2. UVA 1613 K-Graph Oddity K度图着色 (构造)

    题意:在一个n个点的无向连通图中,n是奇数,k是使得所有点的度数不超过k的最小奇数,询问一种染色方案,使得相邻点的颜色不同. 题解:一个点和周围的点的颜色数加起来最大为它的度数+1:如果最大度数是偶数 ...

  3. UVa 11997 K Smallest Sums - 优先队列

    题目大意 有k个长度为k的数组,从每个数组中选出1个数,再把这k个数进行求和,问在所有的这些和中,最小的前k个和. 考虑将前i个数组合并,保留前k个和.然后考虑将第(i + 1)个数组和它合并,保留前 ...

  4. UVA 11997 K Smallest Sums 优先队列 多路合并

    vjudge 上题目链接:UVA 11997 题意很简单,就是从 k 个数组(每个数组均包含 k 个正整数)中各取出一个整数相加(所以可以得到 kk 个结果),输出前 k 小的和. 这时训练指南上的一 ...

  5. UVa 11997 K Smallest Sums 优先队列&amp;&amp;打有序表&amp;&amp;归并

    UVA - 11997 id=18702" target="_blank" style="color:blue; text-decoration:none&qu ...

  6. 优先队列 UVA 11997 K Smallest Sums

    题目传送门 题意:训练指南P189 分析:完全参考书上的思路,k^k的表弄成有序表: 表1:A1 + B1 <= A1 + B2 <= .... A1 + Bk 表2:A2 + B1 &l ...

  7. uva 11997 K Smallest Sums 优先队列处理多路归并问题

    题意:K个数组每组K个值,每次从一组中选一个,共K^k种,问前K个小的. 思路:优先队列处理多路归并,每个状态含有K个元素.详见刘汝佳算法指南. #include<iostream> #i ...

  8. 【UVA 11997 K Smallest Sums】优先级队列

    来自<训练指南>优先级队列的例题. 题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18702 题意:给定 ...

  9. UVa 11069 - A Graph Problem

    题目:给你一个集合{1,2,..,n},计算子集的个数,子集的元素不能相邻且不能再插入元素. 分析:dp,动态规划.相邻元素间仅仅能相差3或者2. 动态方程:f(k)= f(k-2)+ f(k-3): ...

随机推荐

  1. Gulp及组件安装构建

    Gulp 是一款基于任务的设计模式的自动化工具,通过插件的配合解决全套前端解决方案,如静态页面压缩.图片压缩.JS合并.SASS同步编译并压缩CSS.服务器控制客户端同步刷新. Gulp安装 全局安装 ...

  2. LFS: Interface eth0 doesn't exist

    环境 宿主主机:Ubuntu 14.04.4 LTS 32位 LFS内核:Linux 4.2.0 好不用容易将LFS引导起来了,但系统启动后,无法配置网口.系统启动时提示:Interface eth0 ...

  3. windows下启动/关闭Sybase数据库服务器

    启动.关闭Sybase数据库服务器 一.启动Sybase服务器 在windows下介绍两种方法启动Sybase数据库服务器. 1.通过服务器管理器 依次打开控制面板>管理工具>服务 管理窗 ...

  4. yum安装epel库后,安装软件总是提示Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again(无法检索epel仓库)

    解决方法: vi /etc/yum.repos.d/epel.repo 将baseurl中的注释取消,将mirrorlist该列注释掉即可. 附图如下:

  5. 获取系统的IP

    如何获取Linux系统的ip.当时一直用这种方法获取IP的. ifconfig|grep 'Bcast'|awk -F ':' '{print $2}'|awk '{print $1}' 今天偶然发现 ...

  6. oracle linux 安装过程错误 :Error in invoking target ‘agent nmhs’ of makefile

    Problem:When installing 11.2.0.4 on Redhat 7: Error in invoking target 'agent nmhs' of makefile '/u0 ...

  7. @init 自定义

    相当于构造方法,有的时候初始化的时候有一些默认值,还有就是页面加载数据的时机问题,防止加载了页面再填数据 声明: -(instancetype)initWithName:(NSString *)aNa ...

  8. 向Oracle数据库中CLOB插入数据报错问题

    今天在项目中向数据库的CLOB属性插入一段篇文章(1000~2000)字就会报一个字符串过长的错误. 网上说用流来处理,没有这么做.这像是一个Bug,只要把插入的数据,默认扩充到2000以上就ok了. ...

  9. has leaked ServiceConnection com.baidu.location.LocationClient

    02-06 05:01:52.806: E/ActivityThread(1120): Activity com.project.xxxActivity $1@45fc5af8 that was or ...

  10. 【转】Delphi内嵌ASM简易教程

    Delphi内嵌ASM简易教程 作者:heiying2006-03-19 18:33分类:默认分类标签: 前言 Delphi作为一个快速高效的开发平台,使用的人越来越多,但熟悉在Delphi代码中嵌入 ...