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'); }
}

UVALive - 8273 Assigning Frequencies (搜索 )的更多相关文章

  1. UVALive 6255 Kingdoms --状态搜索

    题意:n个国家,给出国家间相互的债务关系,每个国家如果债务>收入就要破产,破产后该国的所有债务关系全部清除,第一个破产的国家不同有可能造成最后的没破产的国家的不同,问哪些国家有可能成为独自存活的 ...

  2. UVALive 5107 dfs暴力搜索

    题目链接:A hard Aoshu Problem DES:给三个字符串,包含的字符是A-E范围内的.长度都不超过8.每个字符可以而且只可以匹配一个数字.两个字符不能匹配相同的数字.前两个式子之间可以 ...

  3. UVALive 5844 dfs暴力搜索

    题目链接:UVAive 5844 Leet DES:大意是给出两个字符串.第一个字符串里的字符可以由1-k个字符代替.问这两个字符串是不是相等.因为1<=k<=3.而且第一个字符串长度小于 ...

  4. Railroad UVALive - 4888 记忆化搜索

    https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_probl ...

  5. uva 6957 Hyacinth bfs

    Hyacinth Time Limit: 20 Sec  Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/problem/viewPro ...

  6. UVALive 4864 Bit Counting --记忆化搜索 / 数位DP?

    题目链接: 题目链接 题意:如果一个数二进制n有k位1,那么f1[n] = k,如果k有s位二进制1,那么f2[n] = f1[k] = s.  如此往复,直到fx[n] = 1,此时的x就是n的”K ...

  7. UVALive 6470 Chomp --记忆化搜索

    题意:给一个只有三行的方块阵(横向最多100个),然后p,q,r分别代表第1,2,3层的方格数,两人轮流去掉一个格子,此时这个格子的右上方都会被去掉,面临只剩最左下角的一个格子的状态的人输,问先手能否 ...

  8. UVALIVE 5893 计算几何+搜索

    题意:很复杂的题意,我描述不清楚. 题目链接:http://acm.bnu.edu.cn/bnuoj/contest_show.php?cid=3033#problem/33526 大致是,给定一个起 ...

  9. UVALive 6168 Fat Ninjas --二分小数+搜索

    题意:一个NxN的网格地板,有一些激光束从天花板垂直射向地面的某个网格,一个圆要安全地从左走到右,不碰到上边界,下边界以及激光束,问这个圆的直径最大能达到多大. 分析:可以二分直径,关键在check函 ...

随机推荐

  1. git 本地新建分支Push到远程

    1. 本地新建分支,并切换到新的分支 git branch local_branch; git checkout local_branch; 2.第一条的命令也可以简单的一条命令来替代 git che ...

  2. (转)Linux下select, poll和epoll IO模型的详解

    Linux下select, poll和epoll IO模型的详解 原文:http://blog.csdn.net/tianmohust/article/details/6677985 一).Epoll ...

  3. 《java学习三》jvm性能优化-------调优

    常见参数配置 -XX:+PrintGC      每次触发GC的时候打印相关日志 -XX:+UseSerialGC      串行回收 -XX:+PrintGCDetails  更详细的GC日志 -X ...

  4. mysql非常全的和完整的总结

    (1)数据类型 类型 备注 tinyint/smallint/mediumint/int/bigint 1B/2B/3B/4B/8B float/double 单精度/双精度浮点型 decimal 不 ...

  5. D. Statistics of Recompressing Videos

    D. Statistics of Recompressing Videos time limit per test 3 seconds memory limit per test 256 megaby ...

  6. zTree使用随笔

    最近开发过程中,需要写一个公司人员组织架构的树状图,后来选用了依赖jQuery的zTree插件来实现,主要是该插件功能齐全,性能稳定,个性化编辑方便,遂选用了这个插件.我记录了一下根据自身需求定制化修 ...

  7. MapReduce的过程(2)

    MapReduce的编程思想(1) MapReduce的过程(2) 1. MapReduce从输入到输出 一个MapReduce的作业经过了input.map.combine.reduce.outpu ...

  8. azure powershell 获取可用镜像列表

    通过Azure Powershell 指定location和Pbulishername 获取所有可用镜像的 publisherName,Offer,Skus,Version,location信息列表 ...

  9. uvm_reg_predictor——寄存器模型(十一)

    保存寄存器的值 观察DUT寄存器值的变化. //---------------------------------------------------------------------------- ...

  10. BZOJ 3992: [SDOI2015]序列统计 NTT+快速幂

    3992: [SDOI2015]序列统计 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1155  Solved: 532[Submit][Statu ...