UVA-10004-Bicoloring二分图染色
题意:给一张图,判断是不是二分图;
自己一开始不知道是二分图染色,理解的是任意三点不能互相连接
可能以后遇到这样的模型,可以往二分图想;
首先怎么判定一个图是否为二分图
从其中一个定点开始,将跟它邻接的点染成与其不同的颜色,最后如果邻接的点有相同颜色,则说明不是二分图;
每次用bfs遍历即可;
下面这个算是模板:解释的比较详细。
#include <queue>
#include <cstring>
#include <iostream>
using namespace std; const int N = ;
int col[N], Map[N][N]; //0为白色,1为黑色
bool BFS(int s, int n)
{
queue<int> p;
p.push(s);
col[s] = ; //将搜索起始点涂成黑色
while(!p.empty())
{
int from = p.front();
p.pop();
for(int i = ; i <= n; i++)
{
if(Map[from][i] && col[i] == -) //如果从from到i的边存在(为邻接点) && i点未着色
{
p.push(i); //将i点加入队列
col[i] = !col[from];//将i点染成不同的颜色
}
if(Map[from][i] && col[from] == col[i])//如果从from到i的边存在(为邻接点)
return false; //并且 i点和from点这一对邻接点颜色相同,
} // 则不是二分图
}
return true; //搜索完s点和所有点的关系,并将邻接点着色,且邻接点未发现相同色则返回true
} int main()
{
int n, m, a, b;
memset(col, -, sizeof(col));
cin >> n >> m; //n 为有多少点,m为有多少边
for(int i = ; i < m; i++)
{
cin >> a >> b;
Map[a][b] = Map[b][a] = ;
}
bool flag = false;
for(i = ; i <= n; i++) //遍历并搜索各个连通分支
{
if(col[i] == - && !BFS(i, n)) //每次找没有着色的点进行判断,如果从它开始BFS发现相同色邻接点则不是二分图
{
flag = true;
break;
}
}
if(flag)
cout << "NO" <<endl;
else
cout << "YES" <<endl;
return ;
}
自己的本题ac代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue> using namespace std;
int n,m,book[],mp[][];
void init(){
memset(book,-,sizeof(book));
memset(mp,,sizeof(mp));
}
bool bfs(int s)
{
queue <int> q;
q.push(s);
book[s]=;
while(!q.empty())
{
int from = q.front();
q.pop();
for(int i=;i<n;i++)
{
if(mp[from][i]&&book[i]==-)
{
q.push(i);
book[i] = !book[from];
}
if(mp[from][i]&&book[i]==book[from])
{
return false;
}
}
}
return true;
}
int main(){
while(~scanf("%d",&n),n){
scanf("%d",&m);
init();
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
mp[x][y]=;
mp[y][x]=;
}
bool flag = true;
for(int i=;i<n;i++)
{
if(book[i]==-&&!bfs(i))
{
flag=false;
break;
}
}
if(flag)puts("BICOLORABLE.");
else puts("NOT BICOLORABLE.");
}
return ;
}
UVA-10004-Bicoloring二分图染色的更多相关文章
- UVA - 10004 Bicoloring(判断二分图——交叉染色法 / 带权并查集)
d.给定一个图,判断是不是二分图. s.可以交叉染色,就是二分图:否则,不是. 另外,此题中的图是强连通图,即任意两点可达,从而dfs方法从一个点出发就能遍历整个图了. 如果不能保证从一个点出发可以遍 ...
- uva 10004 Bicoloring(dfs二分染色,和hdu 4751代码差不多)
Description In the ``Four Color Map Theorem" was proven with the assistance of a computer. This ...
- UVA 10004 Bicoloring(DFS染色)
题意: 给N个点构成的无环无向图,并且保证所有点对都是连通的. 给每个点染色,要么染成黑要么染成白.问是否存在染色方案使得所有有边相连的点对颜色一定不一样. 是输出 BICOLORABLE 否则输出 ...
- UVA 10004 Bicoloring
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=12&pa ...
- Bicoloring 二分图+染色
https://vjudge.net/contest/281085?tdsourcetag=s_pcqq_aiomsg#problem/B #include<stdio.h> #inclu ...
- Bicoloring UVA - 10004 二分图判断
\(\color{#0066ff}{题目描述}\) 多组数据,n=0结束,每次一个n,m,之后是边,问你是不是二分图 \(\color{#0066ff}{输入样例}\) 3 3 0 1 1 2 2 0 ...
- UVA - 11396 Claw Decomposition(二分图染色)
题目大意:给你一张无向图,每一个点的度数都是3. 你的任务是推断是否能把它分解成若干个爪(每条边仅仅能属于一个爪) 解题思路:二分图染色裸题.能够得出:爪的中心点和旁边的三个点的颜色是不一样的 #in ...
- LA 3523 圆桌骑士(二分图染色+点双连通分量)
https://vjudge.net/problem/UVALive-3523 题意: 有n个骑士经常举行圆桌会议,商讨大事.每次圆桌会议至少应有3个骑士参加,且相互憎恨的骑士不能坐在圆桌旁的相邻位置 ...
- 训练指南 UVALive - 3523 (双联通分量 + 二分图染色)
layout: post title: 训练指南 UVALive - 3523 (双联通分量 + 二分图染色) author: "luowentaoaa" catalog: tru ...
- NOIP2008双栈排序[二分图染色|栈|DP]
题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1 ...
随机推荐
- Linux之TCPIP内核参数
/proc/sys/net目录 参考1.Linux之TCPIP内核参数优化 所有的TCP/IP参数都位于/proc/sys/net目录下(请注意,对/proc/sys/net目录下内容的修改都是临时的 ...
- 【JDK】JDK源码分析-Collection
Java 集合框架(Java Collections Framework, JCF)包含很多平时开发中的常用类,例如 List.Set.ArrayList.HashMap.HashSet 等,因此打算 ...
- Js面向对象原型~构造函数
脑袋一团浆糊,但希望写点啥,所有就有了这篇博文了,抱歉哦....开始吧!!!! 什么是构造函数?? 所谓"构造函数",其实就是一个普通函数,但是内部使用了this变量.对构造 ...
- java8中使用函数式接口
使用函数式接口 Predicate @FunctionalInterface interface Predicate<T>{ boolean test(T t); } public sta ...
- v-text,v-html等区别
首先我们知道vue中有很多自定义指令,以v- 开头,例如:v-text,v-bind,v-model, v-if,等 在这些指令中,部分指令之间是很容易被混淆,所以今天决定自己总结一下以下几个相似指令 ...
- main方法中注入Spring bean
在有些情况下需要使用main使用Spring bean,但是main方法启动并没有托管给Spring管理,会导致bean失败,报空指针异常. 可以使用 ClassPathXmlApplicationC ...
- 恐怖的Hibernate和JavaFX Table CallBack!
目录 [隐藏] 1 Hibernate 2 JavaFX Table Hibernate 最近在做 JavaFX 应用,不管再怎么避免数据持久化,但面对几十万的数据量的时候也只能乖乖的去配置持久层框架 ...
- npm包开发与发布
把通用的功能开发成npm包,便用使用和维护,更重要的是可以分享给广大的开发者,是不是很激动人心! 那么,步骤如下: 1.创建项目 创建项目目录,npm init ,根据需要输入配置信息(建完后也可以在 ...
- 【转载】C# 中的委托和事件(详解)
<div class="postbody"> <div id="cnblogs_post_body" class="blogpost ...
- Unity实现放大缩小以及相机位置平移实现拖拽效果
放大缩小功能是游戏开发中用到的功能,今天就来讲一下Unity中放大缩小怎么实现. 1.IDragHandler, IBeginDragHandler, IEndDragHandler这三个接口是Uni ...