UVa 1613 K-Graph Oddity 题解

Posted alrond

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 1613 K-Graph Oddity 题解相关的知识,希望对你有一定的参考价值。

难度:α+

题目:??

 

这题要求我们用最少的颜色给一个图里的每个点染色,使相邻点颜色不同。

 

虽然我不知道正确的证明,但是很容易想到用贪心的方法做。

就是从一个点开始,染色,接着到一个相邻点,染色,接着继续下去。

 

这个做法可以 AC。

 

实现上面,用队列进行点的遍历。用数组记录该点可用的颜色。那么更新完一个点后需要把它相邻点的可取颜色集合去掉自己选过的。

 1 while (!q.empty()) { 
 2     int v = q.front(); q.pop();
 3     k = max(k, (int)G[v].size()); // 题目要求一个点的最大度数 K
 4     for (int c = 1; c <= n; c++) { // 枚举选择颜色
 5         if (!valid[v][c]) continue; // 如果不能选这个颜色,继续枚举
 6         color[v] = c; // 记录该点的颜色
 7         col = max(col, c); // 颜色也要求一个最大值,之后要更新 K。因为 K >= Col
 8         for (int i = 0; i < G[v].size(); i++) {  // 更改相邻点的可取颜色
 9             int u = G[v][i];
10             valid[u][c] = 0; // 相邻点不可取
11             if (vis[u]) continue; // 如果在队里就不加入
12             q.push(u); vis[u] = 1;
13         }
14         break; // 选完颜色就可以进行到下一个点了
15     }
16 }

 

2018-02-07

以上是关于UVa 1613 K-Graph Oddity 题解的主要内容,如果未能解决你的问题,请参考以下文章

uva1613 K-Graph Oddity

markdown 多个`:: selection`s oddity的规则集

POJ1613 147/思维题

2019年2月做题记录

UVA 11995 (STL_E题)解题报告

UVA 10815 (STL_C题)解题报告