n个点的一张图,问能否给每个点染上三种颜色中的一种,使得没有相邻的点颜色相同?

n <= 35。

Sample Input
4
6
6
0 3
1 5
3 2
2 5
0 4
1 0
7
12
6 5
0 3
2 6
3 5
5 0
0 4
4 5
6 3
1 4
1 2
3 4
2 3
7
8
6 5
0 3
2 6
3 5
1 4
1 2
3 4
2 3
6
9
0 1
1 2
2 3
5 2
5 3
3 4
2 4
1 4
4 5 Sample Output
Y
N
Y
N

  

先想的求出最大团,然后如果最大团的点数 > 3一定不可以。

最大团的点数 <= 3呢?一定可以吗?不是这样的。

下面这个图最大团是3,然而也是不满足条件的。

可以搜索,枚举第一个点染的颜色,就可以3*2^(n-1)暴力。

然而有一个优化就是可以先求出所有的联通块,然后对每个联通块这样暴力。

场上写的T了。。被大佬们反杀。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>
#include <vector> using namespace std;
const int maxn = ;
const int maxm = ;
const int INF=0x7f7f7f7f; int v[maxm], nxt[maxm], last[maxm];
int vis[maxn], d[maxn];
vector<int> vc[maxn];
int sz = ;
int n, m; void DFS(int k, int p)
{
vc[p].push_back(k);
vis[k] = ;
for (int i = last[k]; i; i = nxt[i])
if (!vis[v[i]]) DFS(v[i], p);
} void init()
{
sz = ;
for (int i = ; i < maxn; i++) vc[i].clear();
memset(last, , sizeof(last));
memset(vis, , sizeof(vis));
memset(d, , sizeof(d));
} void build(int x, int y)
{
sz++;
v[sz] = y, nxt[sz] = last[x], last[x] = sz;
} bool ok(int k)
{
for (int i = last[k]; i; i = nxt[i])
if (d[k] == d[v[i]]) return false;
return true;
} bool check(int p, int k)
{
if (k == vc[p].size()) return true;
int x = vc[p][k];
for (int i = ; i <= ; i++)
{
d[x] = i;
if (!ok(x)) continue;
if (check(p, k+)) return true;
}
d[x] = ;
return false;
} int main()
{
int t;
scanf("%d", &t);
for (int ca = ; ca <= t; ca++)
{
init();
scanf("%d%d", &n, &m); for (int i = ; i <= m; i++)
{
int x, y;
scanf("%d%d", &x, &y);
build(x, y), build(y, x);
} int cnt = ;
for (int i = ; i < n; i++)
if (!vis[i])
{
++cnt;
DFS(i, cnt);
} int flag = true;
for (int i = ; i <= cnt; i++)
if (!check(i, )) { flag = false; break; } printf("%c\n", flag ? 'Y':'N'); }
}

最新文章

  1. 将Web应用发布到tomcat中的三种方法
  2. jQuery验证控件jquery.validate.js使用说明
  3. codeforces 483B Friends and Presents 解题报告
  4. android之AlertDialog 点击其他区域自动消失
  5. PCB设计备忘录
  6. Python学习笔记5-字符串、bool、数值操作和数组字典排序
  7. T-SQL的10个好习惯
  8. Docker打包 Asp.Net Core应用,在CentOS上运行(转)
  9. MongoDB Schema Design
  10. 在线html编辑器
  11. mysql通过“延迟关联”进行limit分页查询优化的一个实例
  12. linux 101 hacks 5PS1
  13. 调整UIPickerView高度
  14. (模拟)Arithmetic Sequence -- HDU -- 5400
  15. 经典SQL分页语句
  16. 【二分】Codeforces Round #404 (Div. 2) C. Anton and Fairy Tale
  17. servlet 通过 FileItem 实现多文件上传
  18. Python3.x:pyodbc调用sybase的存储过程
  19. Ueditor上传图片到本地改造到上传图片到七牛云存储
  20. linux系统 使用git图形化管理工具———gitk

热门文章

  1. STM32之VCP1/VCAP2引脚的处理
  2. Canada Cup 2016 C. Hidden Word 构造模拟题
  3. (转)linux traceroute命令参数及用法详解--linux跟踪路由命令
  4. kie-api 组件介绍
  5. .NET CORE IIS 500.21
  6. CF713C Sonya and Problem Wihtout a Legend &amp; hihocoder1942 单调序列
  7. Garmin APP开发之布局
  8. 初识AutoCompleteTextView
  9. cesium-大规模人群运动测试
  10. win7下一直试用Beyond Compare 4