题意:给一张图,判断是不是二分图;

自己一开始不知道是二分图染色,理解的是任意三点不能互相连接

可能以后遇到这样的模型,可以往二分图想;

首先怎么判定一个图是否为二分图

从其中一个定点开始,将跟它邻接的点染成与其不同的颜色,最后如果邻接的点有相同颜色,则说明不是二分图;

每次用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二分图染色的更多相关文章

  1. UVA - 10004 Bicoloring(判断二分图——交叉染色法 / 带权并查集)

    d.给定一个图,判断是不是二分图. s.可以交叉染色,就是二分图:否则,不是. 另外,此题中的图是强连通图,即任意两点可达,从而dfs方法从一个点出发就能遍历整个图了. 如果不能保证从一个点出发可以遍 ...

  2. uva 10004 Bicoloring(dfs二分染色,和hdu 4751代码差不多)

    Description In the ``Four Color Map Theorem" was proven with the assistance of a computer. This ...

  3. UVA 10004 Bicoloring(DFS染色)

    题意: 给N个点构成的无环无向图,并且保证所有点对都是连通的. 给每个点染色,要么染成黑要么染成白.问是否存在染色方案使得所有有边相连的点对颜色一定不一样. 是输出 BICOLORABLE 否则输出 ...

  4. UVA 10004 Bicoloring

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=12&pa ...

  5. Bicoloring 二分图+染色

    https://vjudge.net/contest/281085?tdsourcetag=s_pcqq_aiomsg#problem/B #include<stdio.h> #inclu ...

  6. Bicoloring UVA - 10004 二分图判断

    \(\color{#0066ff}{题目描述}\) 多组数据,n=0结束,每次一个n,m,之后是边,问你是不是二分图 \(\color{#0066ff}{输入样例}\) 3 3 0 1 1 2 2 0 ...

  7. UVA - 11396 Claw Decomposition(二分图染色)

    题目大意:给你一张无向图,每一个点的度数都是3. 你的任务是推断是否能把它分解成若干个爪(每条边仅仅能属于一个爪) 解题思路:二分图染色裸题.能够得出:爪的中心点和旁边的三个点的颜色是不一样的 #in ...

  8. LA 3523 圆桌骑士(二分图染色+点双连通分量)

    https://vjudge.net/problem/UVALive-3523 题意: 有n个骑士经常举行圆桌会议,商讨大事.每次圆桌会议至少应有3个骑士参加,且相互憎恨的骑士不能坐在圆桌旁的相邻位置 ...

  9. 训练指南 UVALive - 3523 (双联通分量 + 二分图染色)

    layout: post title: 训练指南 UVALive - 3523 (双联通分量 + 二分图染色) author: "luowentaoaa" catalog: tru ...

  10. NOIP2008双栈排序[二分图染色|栈|DP]

    题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1 ...

随机推荐

  1. Angular JS 中的内置方法之$watch

    在$apply方法中存在脏检查,首先apply方法会触发evel方法,当evel方法解析成功后,会去触发digest方法,digest方法会触发watch方法. $watch(watchFn,watc ...

  2. GitHub 用户排行榜

    排行榜预览网址:Github | Githack | UNPKG | Gitee Github 中国用户排名,全球仓库 Star 最多排名,通过 Github API v3 来生成页面数据,排行榜预览 ...

  3. 面向对象---prototype、__proto__、实例化对象三者之间的关系

    1.构造函数 a.什么是构造函数? 解释:通过关键字new 创建的函数叫做构造函数 作用:用来创建一个对象 废话少说直接上代码,首先我们还是创建一个构造函数人类 然后我们在创建两个实例,一个凡尘 一个 ...

  4. fiddler设置断点

    1.有两种方法设置断点 before response:也就是发送请求之后,但是Fiddler代理中转之前,这时可以修改请求的数据 after response:也就是服务器响应之后,但是在Fiddl ...

  5. Spark 系列(四)—— RDD常用算子详解

    一.Transformation spark 常用的 Transformation 算子如下表: Transformation 算子 Meaning(含义) map(func) 对原 RDD 中每个元 ...

  6. HBuilderX使用Vant组件库

    HBuilderX使用Vant组件库 HBuilderX是一款由国人开发的开发工具,其官网称其为轻如编辑器.强如IDE的合体版本.但是官方的社区中关于Vant组件的安装大多都是针对微信小程序开发安装V ...

  7. 分享我的GD32F450的IAP过程

    最近一个项目使用GD32F450VI+ESP8266需要做远程升级,基本参考正点原子IAP的那一章节,但是在GD32F450上却遇到了问题,无法跳转,然后使用正点原子的开发板stm32f429,以及s ...

  8. Hibernate的执行流程

    Hibernate框架的工作流程 1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件 2.由hibernate.cfg.xml中的&l ...

  9. golang学习(1)---快速hello world

    很多著名的计算机语言都是一两个人在业余时间捣鼓出来的,但是Go语言是由Google的团队打造的.可能一些基础的知识点我不会细讲,因为这个时代你真的得快速学习,才能适应发展. 来看看go的hello, ...

  10. Spring 2017 Assignments2

    一.作业要求 原版:http://cs231n.github.io/assignments2017/assignment2/ 翻译:http://www.mooc.ai/course/268/lear ...