#include <iostream>
#include <cstdio>
#include <string.h>
#include <vector>
#define inf 0xfffffff using namespace std;
const int maxn = 1e5 + 1e2;
const int maxp = 1e3 + 1e2;
//邻接表vector实现
vector<int> G[maxp];
int color[maxp];
int n,m; void init()
{
memset(color,0,sizeof(color));
for(int i = 0;i <= n;i++)
{
G[i].clear();
}
} bool dfs(int s,int clr)
{
color[s] = clr; for(int i = 0;i < G[s].size();i++)
{
int to = G[s][i]; if(color[to] == clr)return false; if(color[to] == 0 && !(dfs(to,-clr)))return false; }
return true;
}
void solve()
{
for(int i = 0;i < n;i++)
{
if(color[i] == 0)
{
if(!dfs(i,1))
{
printf("No\n");
return;
}
}
}
printf("Yes\n");
return;
}
int main()
{
while(cin >> n >> m)
{
init();
for(int i = 0;i < m;i++)
{
int a,b;
cin>>a>>b;
G[a].push_back(b);
G[b].push_back(a);
}
solve();
} return 0;
}

算法的大体思想是,对当前图进行二色染色只有两种颜色1 -1,从一个未染色的点开始,dfs进行染色,先染色当前点,然后对后续所有的点进行如下判断,如果下一个点已经染色且和当前颜色一样——》不是二分图,不一样——》不用管它忽略

如果下一个点没有染色呢,就尝试染色,如果染色失败,则回溯回来后任然是失败

染色成功,不管他,继续染色

以上是一个循环,直到solve函数找不到可以染色的点结束

二分图学习——基础dfs判断二分图的更多相关文章

  1. (hdu)2444 The Accomodation of Students 判断二分图+最大匹配数

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=2444 Problem Description There are a group of s ...

  2. HDU 4751 Divide Groups (2013南京网络赛1004题,判断二分图)

    Divide Groups Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  3. Java实现 LeetCode 785 判断二分图(分析题)

    785. 判断二分图 给定一个无向图graph,当这个图为二分图时返回true. 如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我 ...

  4. JavaScript学习基础部分

    JavaScript学习基础 一.简介 1.JavaScript 是因特网上最流行的脚本语言,并且可在所有主要的浏览器中运行,比方说 Internet Explorer. Mozilla.Firefo ...

  5. 【IOS学习基础】NSObject.h学习

    一.<NSObject>协议和代理模式 1.在NSObject.h头文件中,我们可以看到 // NSObject类是默认遵守<NSObject>协议的 @interface N ...

  6. 20165318 预备作业二 学习基础和C语言基础调查

    20165318 学习基础和C语言基础调查 技能学习经验 我们这一代人,或多或少的都上过各种兴趣班,舞蹈钢琴画画书法,我也是如此.可这些技能中,唯一能拿的出手的就是舞蹈了.按照<优秀的教学方法- ...

  7. [ Java学习基础 ] Java构造函数

    构造方法是类中特殊方法,用来初始化类的实例变量,它在创建对象(new运算符)之后自动调用. Java构造方法的特点如下: 构造方法名必须与类名相同. 构造方法没有任何返回值,包括void. 构造方法只 ...

  8. [ Java学习基础 ] Java的继承与多态

    看到自己写的东西(4.22的随笔[ Java学习基础 ] Java构造函数)第一次达到阅读100+的成就还是挺欣慰的,感谢大家的支持!希望以后能继续和大家共同学习,共同努力,一起进步!共勉! ---- ...

  9. 20165223 学习基础和C语言基础调查

    一.学习基础 1. 我所擅长的技能 从小我就对新鲜事物抱有浓厚的兴趣,因此多年来培养了许多爱好,对感兴趣的诸如绘画方面的国画.油画.素描.漫画等:音乐方面的钢琴.吉他.架子鼓等:运动方面的滑板.溜冰. ...

随机推荐

  1. 使用RSS订阅

    1.绪论 对某一主题完成一次文献检索后,我们希望能持续了解该主题最新文献,即实现文献追踪. 为此,搜索引擎和数据库厂商(数据源)提供一般两种订阅服务:邮件和RSS.订阅后,数据源会自动推送最新信息,免 ...

  2. mysql使用存储过程,自动生成新的表单

    use mydb; delimiter // CREATE procedure create_table(In imax int) BEGIN DECLARE `@i` int(11);      D ...

  3. 【附源文件】软件工具类Web原型制作分享 - Sketch

    Sketch是一款轻量,易用的矢量设计工具.专门为UI设计师开发,让UI设计更简单.更高效. 本原型由国产原型工具-Mockplus制作完成. 非常适合工具类产品官网使用,本模板的交互有通过使用面板组 ...

  4. fastcgi协议解析(nginx)

    请求NGINX ->[ {(post data) +> (NGX_HTTP_FASTCGI_STDIN)} * N +> {(environment variables) +> ...

  5. Zxing2.1扫描取景框变形问题解决

    修改竖屏扫描的贴子,2.0之前的都很适用.可是到了2.1,有些贴子的做法可以将扫描框改为竖屏,但是取景框里扫描到的东西是变形的(扁的),本人仔细研究一番,终于解决了这个问题,下面贴出解决办法: 1.修 ...

  6. 【Linux】DNS基础(一)

    DNS基础 DNS 是计算机域名系统 (Domain Name System 或Domain Name Service) 的缩写,域名服务器是进行域名(domain name)和与之相对应的IP地址 ...

  7. vue导航栏实时获取URL设置当前样式,刷新也存在!

    很low 别喷, template代码: <div class="tab-itme"> <ul @click="clickit()"> ...

  8. apache ab工具

    Apache ab并发负载压力测试   ab命令原理 Apache的ab命令模拟多线程并发请求,测试服务器负载压力,也可以测试nginx.lighthttp.IIS等其它Web服务器的压力. ab命令 ...

  9. 2018.12.31 NOIP训练 czy的后宫6(线性dp)

    传送门 题意简述:给一个nnn个数的数列,你可以把它最多分成mmm段,求每段数之和的最大值的最小值,以及满足这个最小值的时候划分数列的方案数. 思路:第一个问题是二分经典问题,不妨设其答案为limli ...

  10. 1.2OpenCV如何扫描图像,利用查找表和计时

    查找表 颜色缩减法:如果矩阵元素存储的是单通道像素,使用C或C++的无符号字符类型,那么像素可有256个不同值. 但若是三通道图像,这种存储格式的颜色数就太多了(确切地说,有一千六百多万种).用如此之 ...