码迷,mamicode.com
首页 > 其他好文 > 详细

UVa 1613 K-Graph Oddity 题解

时间:2018-02-07 22:54:38      阅读:358      评论:0      收藏:0      [点我收藏+]

标签:颜色   rap   style   nbsp   证明   size   需要   我不知道   break   

难度:α+

题目:??

 

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

 

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

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

 

这个做法可以 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 题解

标签:颜色   rap   style   nbsp   证明   size   需要   我不知道   break   

原文地址:https://www.cnblogs.com/Alrond/p/8428442.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!