Graph Coloring I

https://www.nowcoder.com/acm/contest/203/J

题目描述

修修在黑板上画了一些无向连通图,他发现他可以将这些图的结点用两种颜色染色,满足相邻点不同色。
澜澜不服气,在黑板上画了一个三个点的完全图。修修跟澜澜说,这个图我能找到一个简单奇环。
澜澜又在黑板上画了一个n个点m条边的无向连通图。很可惜这不是一道数数题,修修做不出来了。
澜澜非常得意,作为一位毒瘤出题人,有了好题当然要跟大家分享,于是他把这道题出给你做了。

输入描述:

第一行两个整数n,m (1≤ n,m≤ 3*10

5

),接下来m行每行两个整数a

i

,b

i

表示一条边 (1≤ a

i

,b

i

≤ n)。
保证图连通,并且不存在重边和自环。

输出描述:

如果你能把图二染色,第一行输出0,第二行输出n个整数

表示每个点的颜色 (0≤ x

i

≤ 1)。如果有多种合法方案,你可以输出任意一种。
如果你能找到一个简单奇环,第一行输出环长k,第二行输出k个整数

表示环上结点编号 (1≤ y

i

≤ n),你需要保证y

i

和y

i+1

之间有边,y

1

和y

n

之间有边。如果有多种合法方案,你可以输出任意一种。
如果两种情况都是可行的,你只需要输出任意一种。
如果两种情况都是不可行的,请输出一行一个整数-1。

输入例子:
3 2
1 2
1 3
输出例子:
0
0 1 1

-->

示例1

输入

3 2
1 2
1 3

输出

0
0 1 1
示例2

输入

3 3
1 2
1 3
2 3

输出

3
1 2 3

用dfs边搜索边染色,看看有没有相邻的节点有相同的颜色,并判断是否有奇环(如果相邻的节点有相同的颜色就说明存在奇环),都不满足的话就输出-1

 #include<iostream>
#include<cmath>
#include<vector>
#include<cstring>
#include<algorithm>
#define maxn 300005
#define mem(a,b) memset(a,b,sizeof(a))
using namespace std; vector<int>ve[maxn];
int book[maxn];
int color[maxn];
int n,m;
int flag,Start; int dfs(int pos,int fa,int clr,int num){
if(book[pos]){
if(color[pos]==(clr^)) flag=;
if((num-book[pos])&){
cout<<num-book[pos]<<endl;
Start=pos;
return ;
}
return ;
}
book[pos]=num;
color[pos]=clr;
for(int i=;i<ve[pos].size();i++){
if(ve[pos][i]!=fa){
if(!dfs(ve[pos][i],pos,clr^,num+)){
if(pos!=Start){
cout<<pos<<" ";
return ;
}
else{
cout<<pos<<endl;
exit();
}
}
}
}
return ;
} int main(){
std::ios::sync_with_stdio(false);
cin>>n>>m;
int a,b;
flag=;
for(int i=;i<=m;i++){
cin>>a>>b;
ve[a].push_back(b);
ve[b].push_back(a);
}
mem(book,);
mem(color,-);
if(!dfs(,,,)) return ;
if(flag){
cout<<-<<endl;
}
else if(!flag){
cout<<<<endl;
for(int i=;i<=n;i++){
if(i!=){
cout<<" ";
}
cout<<color[i];
}
cout<<endl;
}
}

Graph Coloring I(染色)的更多相关文章

  1. UVA 193 Graph Coloring 图染色 DFS 数据

    题意:图上的点染色,给出的边的两个点不能都染成黑色,问最多可以染多少黑色. 很水的一题,用dfs回溯即可.先判断和当前点相连的点是否染成黑色,看这一点是否能染黑色,能染色就分染成黑色和白色两种情况递归 ...

  2. Codeforces 664D Graph Coloring 二分图染色

    题意: 一个无向图的每条边为红色或蓝色,有这样一种操作:每次选一个点,使与其相邻的所有边的颜色翻转. 求解是否可以经过一系列操作使所有的边颜色相同,并输出最少操作次数和相应的点. 分析: 每个点要么选 ...

  3. UVA Graph Coloring

    主题如以下: Graph Coloring  You are to write a program that tries to find an optimal coloring for agiven ...

  4. poj 1419 Graph Coloring

    http://poj.org/problem?id=1419 题意: 一张图黑白染色,相邻点不能都染黑色,最多能染几个黑色点 最大点独立集 但是图不能同构为二分图,不能用二分图匹配来做 那就爆搜吧 还 ...

  5. GPS-Graph Processing System Graph Coloring算法分析 (三)

        HamaWhite 原创,转载请注明出处!欢迎大家增加Giraph 技术交流群: 228591158     Graph coloring is the problem of assignin ...

  6. POJ 1419 Graph Coloring(最大独立集/补图的最大团)

    Graph Coloring Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 4893   Accepted: 2271   ...

  7. POJ1419 Graph Coloring(最大独立集)(最大团)

                                                               Graph Coloring Time Limit: 1000MS   Memor ...

  8. uva193 - Graph Coloring

    Graph Coloring You are to write a program that tries to find an optimal coloring for a given graph. ...

  9. 【POJ】1419:Graph Coloring【普通图最大点独立集】【最大团】

    Graph Coloring Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5775   Accepted: 2678   ...

随机推荐

  1. Win CE 5.0 增加电池电量显示

    摘自 http://blog.csdn.net/li0531/article/details/8818243 同时只在右上角显示一个 Label 控件,因此代码量精简了很多. [DllImport(& ...

  2. 1012 The Best Rank (25 分)

    1012 The Best Rank (25 分) To evaluate the performance of our first year CS majored students, we cons ...

  3. 关闭浏览器时的友情提醒jQuery写法

    $(window).bind('beforeunload', function () { return '您确定退出该页面吗?'; }); 支持以下浏览器(对号表示支持,叉号表示不支持.):

  4. 10-19 dp专练

    dp专练,终于克服了一次自己对dp的恐惧,磕出来一道题. 得分情况: T1:0 T2:0 T3:0 emmmm,磕出来的题是T2,但是因为初始化和int long long的原因爆零了 T1:n只狼排 ...

  5. vmware 共享文件夹(win10下的vmware安装了centos7)

    最近研究下了docker.我的笔记本是win10系统,就尝试使用了 win10的hyper-v虚拟化技术,总是感觉占用系统较多,于是换成了vmware,在虚拟机中安装 docker容器服务. 考虑到开 ...

  6. 关于oracle数据库压力测试

    今天接到需求,需要对oracle数据库进行压力测试,就这几个字的需求. 然后查看了以下软件: 1.Benchmark Factory是一款专业的服务器性能测试工具,专为数据库测试和可扩展性测量而设计, ...

  7. nodejs——向另一个服务器发送文件

    业务需要,需在客户本地建立一个服务,将本地的数据库文件发送到主服务器. 下面是本地服务代码: var exec = require('child_process').exec; var request ...

  8. Docker-compose 在up之后,各个子服务容器的hosts文件中不能找到父服务的域名

    使用命令查看docker当前建立的网络: docker network ls 发现docker-compose up确实建立了网络xx_default 使用命令查看该网络详细信息: docker in ...

  9. 为挂载到/home的RAID磁盘组扩容

    公司一台DELL服务器,安装的Ubuntu16.04系统,原来是6块1.2T的SAS盘做RAID-5挂载到/home,现在/home空间不够用了,需要扩容,再增加2块1.2T的盘.整个操作不复杂,但有 ...

  10. jpa-jpql-basic-test

    jpql 基本测试 //可以使用 JPQL 完成 UPDATE 和 DELETE 操作. @Test public void testExecuteUpdate(){ String jpql = &q ...