题意;

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

分析:

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

代码:

  

  1. #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. linux内存操作----kernel 3.5.X copy_from_user()和copy_to_user()

    前面的一篇文章中简单的描写叙述了一下内存映射的内容,http://blog.csdn.net/codectq/article/details/25658813,这篇文章作为用户把内存规划好之后,在用户 ...

  2. Android自定义带标题边框的Layout

    今天工作中又碰到个小问题,项目需要用到像Java Swing的JPanel一样带标题边框的布局,Android里没有类似控件,想到这个也不难,自己画了一个,是继承LinearLayout的一个自定义布 ...

  3. 【模拟】【HDU1443】 Joseph

    Joseph Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  4. 通用线程:POSIX 线程详解,第 3 部分 条件互斥量(pthread_cond_t)

    使用条件变量提高效率 本文是 POSIX 线程三部曲系列的最后一部分,Daniel 将详细讨论如何使用条件变量.条件变量是 POSIX 线程结构,可以让您在遇到某些条件时“唤醒”线程.可以将它们看作是 ...

  5. 关于.netFramework概述

    这几天学了不少东西,想来还是应该总结一下,一来自己回顾一下,二来也怕自己忘记,在文章中,有很多东西就是借鉴别人的blog,笔者在这里对他们的无私奉献表示感谢.笔者的语言组织能力有限,如果在文章中出现什 ...

  6. android——字体颜色跟随状态改变

    TextView的字体颜色也可以和ImageView的background一样,跟随状态发生改变.只需要自定义一下字体颜色.在color文件夹下面,新建一个颜色文件的xml. OK ,这就完成 了. ...

  7. 嵌套iframe中的HTML的文档解析类型

    问题:页面整个刷新时,IE11输入框显示的宽度和高度正常,对页面中的iframe部分刷新时,IE11输入框的宽度和高度就变小了. 原因:网页的头部定义了文档类型<!DOCTYPE html> ...

  8. html标签之meta标签

    1  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />   ...

  9. UIView的clipsTobounds属性

    这里的clip是修剪的意思,bounds是边界的意思,合起来就是:如果子视图的范围超出了父视图的边界,那么超出的部分就会被裁剪掉.该属性在实际工程中还是非常实用的,必须要了解清楚.

  10. HDU 1056 - HangOver

    递推 #include <iostream> using namespace std; ]; double c; int main() { f[]=; ;i<=;i++) f[i]= ...