• UVA1613-K-Graph Oddity(贪心)


    Problem UVA1613-K-Graph Oddity

    Accept: 108  Submit: 884
    Time Limit: 3000 mSec

    Problem Description

    Input

    The input will contain several test cases, each of them as described below. Consecutive test cases are separated by a single blank line.
    The first line of the input file contains two integer numbers n and m, where n is the number of vertices in the graph (3 ≤ n ≤ 9999, n is odd), m is the number of edges in the graph (2 ≤ m ≤ 100000). The following m lines describe edges of the graph, each edge is described by two integers ai, bi (1 ≤ ai,bi ≤ n,ai = bi) — the vertex numbers connected by this edge. Each edge is listed at most once. The graph in the input file is connected, so there is a path between any pair of vertices.

     Output

    For each test case, the output must follow the description below. The outputs of two consecutive cases will be separated by a blank line.
    On the first line of the output file write a single integer number k — the minimal odd integer number, such that the degree of any vertex does not exceed k. Then write n lines with one integer number ci (1 ≤ ci ≤ k) on a line that denotes the color of i-th vertex. The colors of any two adjacent vertices must be different. If the graph has multiple different colorings, print any of them. At least one such coloring always exists.
     

     Sample Input

    3 2
    1 3
    3 2
    7 8
    1 4
    4 2
    2 6
    6 3
    3 7
    4 5
    5 6
    5 2
     

    Sample Output

    3
    1
    1
    2
     
    3
    1
    1
    1
    2
    3
    2
    2
     
    题解:这个题过得比较意外,一开始想从度数大的开始涂,弄一个优先队列,画了几个图,发现好像不管怎么涂都对,就写了一个然后过了,为什么是对的真的说不好,欢迎大佬指教。
     
     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 const int maxn = 10000 + 10, maxm = 100000 + 10;
     6 
     7 int n, m, k;
     8 
     9 struct Edge {
    10     int to, next;
    11 }edge[maxm << 1];
    12 
    13 int tot, head[maxn];
    14 int col[maxn], deg[maxn];
    15 bool vis[maxn];
    16 
    17 void init() {
    18     tot = 0;
    19     memset(head, -1, sizeof(head));
    20     memset(deg, 0, sizeof(deg));
    21     memset(col, -1, sizeof(col));
    22 }
    23 
    24 void AddEdge(int u,int v){
    25     edge[tot].to = v;
    26     edge[tot].next = head[u];
    27     head[u] = tot++;
    28 }
    29 
    30 void dfs(int u) {
    31     memset(vis, false, sizeof(vis));
    32     //printf("%d %d
    ", fa, u);
    33     for (int i = head[u]; i != -1; i = edge[i].next) {
    34         int v = edge[i].to;
    35         if (col[v] != -1) vis[col[v]] = true;
    36     }
    37 
    38     for (int i = 1; i <= k; i++) {
    39         if (!vis[i]) {
    40             col[u] = i;
    41             break;
    42         }
    43     }
    44 
    45     for (int i = head[u]; i != -1; i = edge[i].next) {
    46         int v = edge[i].to;
    47         if (col[v] == -1) {
    48             dfs(v);
    49         }
    50     }
    51 }
    52 
    53 int main()
    54 {
    55     //freopen("input.txt", "r", stdin);
    56     bool flag = false;
    57     while (~scanf("%d%d", &n, &m)) {
    58         if(flag) printf("
    ");
    59         flag = true;
    60         init();
    61         int x, y;
    62         for (int i = 0; i < m; i++) {
    63             scanf("%d%d", &x, &y);
    64             deg[x]++, deg[y]++;
    65             AddEdge(x, y);
    66             AddEdge(y, x);
    67         }
    68 
    69         int Max = 0;
    70         for (int i = 1; i <= n; i++) {
    71             Max = Max > deg[i] ? Max : deg[i];
    72         }
    73 
    74         k = (Max & 1) ? Max : Max + 1;
    75         dfs(1);
    76         printf("%d
    ", k);
    77         for (int i = 1; i <= n; i++) {
    78             printf("%d
    ", col[i]);
    79         }
    80     }
    81     return 0;
    82 }
  • 相关阅读:
    Java中使用Jedis连接Redis对Hash进行操作的常用命令
    Java中使用Jedis连接Redis对Set进行操作的常用命令
    Java中使用Jedis连接Redis对List进行操作的常用命令
    Android中获取定位经纬度信息
    Java中使用Jedis连接Redis对String进行操作的常用命令
    Java中使用Jedis连接Redis对Key进行操作的常用命令
    Java中使用Jedis连接池连接Redis数据库流程
    Java中使用Jedis连接Redis数据库流程
    Java中使用Jedis连接Redis服务端时提示:JedisConnectionException: Failed connecting
    调用百度翻译对句子进行翻译
  • 原文地址:https://www.cnblogs.com/npugen/p/9688324.html
Copyright © 2020-2023  润新知