UVALive - 8273 Assigning Frequencies (搜索 )
2024-08-27 22:43:37
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'); }
}
最新文章
- 将Web应用发布到tomcat中的三种方法
- jQuery验证控件jquery.validate.js使用说明
- codeforces 483B Friends and Presents 解题报告
- android之AlertDialog 点击其他区域自动消失
- PCB设计备忘录
- Python学习笔记5-字符串、bool、数值操作和数组字典排序
- T-SQL的10个好习惯
- Docker打包 Asp.Net Core应用,在CentOS上运行(转)
- MongoDB Schema Design
- 在线html编辑器
- mysql通过“延迟关联”进行limit分页查询优化的一个实例
- linux 101 hacks 5PS1
- 调整UIPickerView高度
- (模拟)Arithmetic Sequence -- HDU -- 5400
- 经典SQL分页语句
- 【二分】Codeforces Round #404 (Div. 2) C. Anton and Fairy Tale
- servlet 通过 FileItem 实现多文件上传
- Python3.x:pyodbc调用sybase的存储过程
- Ueditor上传图片到本地改造到上传图片到七牛云存储
- linux系统 使用git图形化管理工具———gitk
热门文章
- STM32之VCP1/VCAP2引脚的处理
- Canada Cup 2016 C. Hidden Word 构造模拟题
- (转)linux traceroute命令参数及用法详解--linux跟踪路由命令
- kie-api 组件介绍
- .NET CORE IIS 500.21
- CF713C Sonya and Problem Wihtout a Legend &; hihocoder1942 单调序列
- Garmin APP开发之布局
- 初识AutoCompleteTextView
- cesium-大规模人群运动测试
- win7下一直试用Beyond Compare 4