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 ...
随机推荐
- 配置没有问题,虚拟机Ubuntu系统ifconfig没有网卡信息
如果没有问题,前几天都好好的,突然出现这个问题 sudo ifconfig etho up 其中eth0是我的网卡名称
- 【iOS】iOS CocoaPods 整理
github 上下载 Demo 时第一次遇到这个情况,当时有些不知所措,也没怎么在意,后来项目调整结构时正式见到了这个,并且自己去了解学习了. CocoaPods安装和使用教程 这篇文章写得很好!ma ...
- cmd与monkey测试
monkey测试的相关命令 monkey是模拟用户触摸操作,不支持条件判断.monkey命令格式: 启动安卓模拟器/真机 点击运行->输入cmd->进入命令行界面 查看设备连接情况,ad ...
- __int64与long long、long的区别
首先来看一看int.long.long long的取值范围 int 所占字节数为:4 表示范围为:-2147483648~2147 ...
- Jenkins 配置 SpringBoot 自动构建部署
服务器版本 Linux version 3.10.0-957.12.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8 ...
- 不用 Spring Security 可否?试试这个小而美的安全框架
写在前面 在一款应用的整个生命周期,我们都会谈及该应用的数据安全问题.用户的合法性与数据的可见性是数据安全中非常重要的一部分.但是,一方面,不同的应用对于数据的合法性和可见性要求的维度与粒度都有所区别 ...
- 微信小程序的视图与渲染
1.组件的基本使用 <button type="default" > default </button> <button type="pri ...
- jdk安装及环境配置
1.下载对应的安装包(我们公司用的是jdk 1.8) 2.选择对应版本,点击安装,在选择安装位置的时候,选择自己对应存放的位置,其他都点击下一步就行了,先安装jdk,后安装jre 3.环境变量,选择 ...
- Django:在OS X环境下连接MySQL数据库
正常的安装只需要执行以下2条命令: $ brew install mysql-connector-c $ pip3 install mysqlclient 但在执行 pip3 install mysq ...
- 自定义markdown代码高亮显示-cnblog
这个代码高亮..一点儿都不高亮...... cnblog里已经有闻道先者贴出代码了, https://www.cnblogs.com/liutongqing/p/7745413.html 效果大概是这 ...