题目要求k>=最大度数;
观察,颜色数量和度数的关系,得颜色数=最大度数+1(偶数)//最大度数(奇数) 可以满足染色关系
一个点和周围的点的颜色数加起来最大为它的度数+1;
 k=所有点中最大的度。如果最大入度是偶数,则k+1。
证明:当最大度数为奇数n,设点u所连n个点,点u为1,n-1个点不一样,1个点和某个点相同(2-n),那么其他n-1个点可以相连,度数n-2+1=n-1,如果再连这个相同点,度数为n;然而此时一共有n+1个点,为偶数,所以要再加一个点
如果加到这个点(新的n),最大度数改变,不可以;加到其他点,也不能超过n,所以一定有两个点没有直接相连,交换没有直接相连的点和(新的n那个点),就满足了条件
策略:dfs

k = (max(deg+1,deg+1+n))|1;

#include <iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = ;
const int maxm = ; //为啥开这么大....用100005re int head[maxn],to[maxm],nxt[maxm],col[maxn],ecnt,deg[maxn];
int vis[maxn];
int k;
void addEdge(int u,int v)
{
deg[u]++;
k=max(k,deg[u]);
to[ecnt] = v;
nxt[ecnt] = head[u];
head[u] = ecnt++;
}
void dfs(int u)
{
for(int i = head[u]; i!=-; i= nxt[i])
vis[col[to[i]]] = u; //u的连接点的颜色都标记为u,不能用 for(int i = ; 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()
{
int n,m;
while(scanf("%d",&n)==){
k=;
scanf("%d",&m);
memset(head,-,sizeof(head));
memset(deg,,sizeof(deg));
memset(col,,sizeof(col));
ecnt = ; while(m--){
int u,v;
scanf("%d %d",&u,&v);
addEdge(u,v); addEdge(v,u);
} k = k|;
memset(vis,,sizeof(vis)); dfs();
printf("%d\n",k);
for(int i = ; i <= n; i++)
printf("%d\n",col[i]);
cout<<endl;
}
return ;
}

uva1613 K-Graph Oddity的更多相关文章

  1. Problem K: Yikes -- Bikes!

    http://acm.upc.edu.cn/problem.php?id=2780 昨天做的题,没过……!!!伤心……题意:给你n个单位,n-1组关系,让你单位换算……解题思路:Floyd算法自己听别 ...

  2. [Swift]LeetCode787. K 站中转内最便宜的航班 | Cheapest Flights Within K Stops

    There are n cities connected by m flights. Each fight starts from city u and arrives at v with a pri ...

  3. LeetCode——787. K 站中转内最便宜的航班

    有 n 个城市通过 m 个航班连接.每个航班都从城市 u 开始,以价格 w 抵达 v. 现在给定所有的城市和航班,以及出发城市 src 和目的地 dst,你的任务是找到从 src 到 dst 最多经过 ...

  4. P 算法与 K 算法

    P 算法与 K 算法 作者:Grey 原文地址: 博客园:P 算法与 K 算法 CSDN:P 算法与 K 算法 说明 P 算法和 K 算法主要用来解决最小生成树问题,即:不破坏连通性删掉某些边,使得整 ...

  5. [Java 缓存] Java Cache之 Guava Cache的简单应用.

    前言 今天第一次使用MarkDown的形式发博客. 准备记录一下自己对Guava Cache的认识及项目中的实际使用经验. 一: 什么是Guava Guava工程包含了若干被Google的 Java项 ...

  6. 数据结构与算法 Big O 备忘录与现实

    不论今天的计算机技术变化,新技术的出现,所有都是来自数据结构与算法基础.我们需要温故而知新.        算法.架构.策略.机器学习之间的关系.在过往和技术人员交流时,很多人对算法和架构之间的关系感 ...

  7. poj3311 Hie with the Pie (状态压缩dp,旅行商)

    Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 3160   Accepted: 1613 ...

  8. 最短路问题Dijkstra算法

    Dijkstra算法可以解决源点到任意点的最短距离并输出最短路径 准备: 建立一个距离数组d[ n ],记录每个点到源点的距离是多少 建立一个访问数组v[ n ],记录每个点是否被访问到 建立一个祖先 ...

  9. Theano2.1.5-基础知识之打印出theano的图

    来自:http://deeplearning.net/software/theano/tutorial/printing_drawing.html Printing/Drawing Theano gr ...

  10. floyd原理以及求最小环

    floyd这个东西学会了好久了,但是原理总是忘记,或者说没有真正的明白,这里在说一下. 我们要求的是任意的 i,j 之间的最短路径,用动态规划的思想来解决就是f[i,j,k]表示i到j中间节点不超过k ...

随机推荐

  1. socket入门教程

    Server.cs   服务端程序 using System; using System.Collections.Generic; using System.ComponentModel; using ...

  2. 1. jsp中<base target='' />标签用法

    用于页面跳转后,页面最后跳转到哪个iframe.例子如下: index.jsp :首页 <head> <base href="<%=basePath %>&qu ...

  3. Spring-SpringMVC父子容器&AOP使用总结

    此文已由作者尧飘然授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Spring&SpringMVC Spring&SpringMVC作为bean管理容器和MV ...

  4. loj#2540. 「PKUWC2018」随机算法

    传送门 完了pkuwc咋全是dp怕是要爆零了-- 设\(f(S)\)表示\(S\)的排列数,\(S\)为不能再选的点集(也就是选到独立集里的点和与他们相邻的点),\(mx(S)\)表示\(S\)状态下 ...

  5. NOIp 2014飞扬的小鸟【dp】By cellur925

    题目传送门 放在14年Day1T3的dp题目...应该比较看出来是dp算法吧,因为在本蒟蒻看来求最值的算法不清晰时就是dp了==. 状态还是比较好设计的,考虑到每个情况需要记录下的量:f[i][j]表 ...

  6. Codeforces Round #405 (rated, Div. 2, based on VK Cup 2017 Round 1) C

    Description In the army, it isn't easy to form a group of soldiers that will be effective on the bat ...

  7. 递推DP HDOJ 5459 Jesus Is Here

    题目传送门 题意:简单来说就是sn = sn-1 + sn-2递推而来,求其中所有c字符的:∑i<j:sn[i..i+2]=sn[j..j+2]=‘‘cff"(j−i) mod 530 ...

  8. 线段树(单点更新) POJ 2886 Who Gets the Most Candies?

    题目传送门 #include <cstdio> #include <cstring> #define lson l, m, rt << 1 #define rson ...

  9. linux常用的shell命令

    1.shell介绍 shell(外壳)是linux系统的最外层,简单的说,它就是用户和操作系统之间的一个命令解释器. 2.shell命名的使用 ls :查看当前目录的信息,list .        ...

  10. 1-2JDK的安装和环境变量设置

    JDK的下载和安装 可以去oracle官网里面下载JDK:http://www.oracle.com 英文不好的同学可以通过下面这个百度网盘的链接进行下载:http://pan.baidu.com/s ...