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 ...
随机推荐
- poj 1068 模拟
题目链接 大概题意就是告诉你有个n个小括号,每一个")"左边有多少个"("都告诉你了,然后让你求出每一对括号之间有多少对括号(包含自己本身). 思路: 我先计算 ...
- Spring的依赖注入和管理Bean
采用Spring管理Bean和依赖注入 1.实例化spring容器 和 从容器获取Bean对象 实例化Spring容器常用的两种方式: 方法一: 在类路径下寻找配置文件来实例化容器 [推荐使用] Ap ...
- TensorFlow学习笔记——深层神经网络的整理
维基百科对深度学习的精确定义为“一类通过多层非线性变换对高复杂性数据建模算法的合集”.因为深层神经网络是实现“多层非线性变换”最常用的一种方法,所以在实际中可以认为深度学习就是深度神经网络的代名词.从 ...
- 手摸手,带你用vue实现后台管理权限系统及顶栏三级菜单显示
手摸手,带你用vue实现后台管理权限系统及顶栏三级菜单显示 效果演示地址 项目demo展示 重要功能总结 权限功能的实现 权限路由思路: 根据用户登录的roles信息与路由中配置的roles信息进行比 ...
- Activiti6系列(1)- 核心数据库表及字段注释说明
前言 本文是根据<疯狂工作流讲义-Activiti6.0>一书中提取过来的,有兴趣的可以去当当网买这本书,讲的很不错,最后还有实战案例. 虽然是提取过来的,但完全靠手打梳理,觉得有用的小伙 ...
- 《HTTP权威指南》--阅读笔记(一)
HTTP: HyperText Transfer Protocol 测试站点:http://www.joes-hardware.com URI包括URL和URN URI: Uniform Resour ...
- hadoop学习(六)----HDFS的shell操作
HDFS所有命令: [uploaduser@rickiyang ~]$ hadoop fs Usage: hadoop fs [generic options] [-appendToFile < ...
- JQGrid之文件上传
文件/图片上传功能,简单总结如下 1.引入ajaxfileupload.js 注意:该文件需要在引入Jquery之后引入 下载链接:https://i.cnblogs.com/Files.aspx 2 ...
- 【程序人生】从湖北省最早的四位java高级工程师之一到出家为僧所引发的深思
从我刚上大学接触程序员这个职业开始,到如今我从事了七年多程序员,这期间我和我的不少小伙伴接受了太多的负面信息,在成长的道路上也真了交了不少的情商税.这些负面信息中,有一件就是我大学班主任 ...
- html页面中关于按钮type的要求
重要事项:如果在 HTML 表单中使用 button 元素,不同的浏览器会提交不同的值.Internet Explorer 将提交 <button> 与 </button> 之 ...