#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. PAT 1087 有多少不同的值(20)(STL—set)

    1087 有多少不同的值(20 分) 当自然数 n 依次取 1.2.3.--.N 时,算式 ⌊n/2⌋+⌊n/3⌋+⌊n/5⌋ 有多少个不同的值?(注:⌊x⌋ 为取整函数,表示不超过 x 的最大自然数 ...

  2. dataTables的学习笔记 -- 未开启服务器数据模式

    官方网站:http://www.datatables.net/ (1)未开启服务器数据模式(即"bServerSide" : false),数据会从后台直接全部获取,然后在前台全部 ...

  3. SumatraPDF默认配置文件备份

    background color of the non-document windows, traditionally yellow MainWindowBackground = #fff200 if ...

  4. nodejs 开发服务端 child_process 调试方法(1)

    由于最近正在做一个服务端项目,采用了nodejs引擎开发,主要是master-worker工作机制;主进程可以直接调试,但是子进程调试好像有点麻烦,我没有找到好的方法; worker这里,我分拆成了几 ...

  5. UI设计初学者教程:色彩基础知识

    编辑:千锋UI设计 初学设计都会先认识三原色,通常我们说的三原色指的是颜料三原色:红.黄.蓝:其实三原色还有色光三原色:红.绿.蓝.我们通常说的红黄蓝就是减色法三原色,而红绿蓝是加色法三原色.可能这么 ...

  6. UI设计教程分享:让你彻底读懂字体

    一份普普通通.规规矩矩的设计 一份让人印象深刻.新颖有趣的设计 差在哪?其实就差在三个字上! “优秀的设计不是每一个细节都有亮点,而是弱化其他元素,让某一个亮点最大化.” 今天“骉叔的设计心得”就来总 ...

  7. virtualbox 采用 NAT 还是 BRIDGE

    正如标题所言,其实这两个都可以让虚拟机上网,但是还是有些差别的. 选择NAT的话, 虚拟机之间无法PING通 虚拟机可以PING通主机 主机无法PING通虚拟机 这是因为虚拟机不能在网络里拥有自己的I ...

  8. Python之路(第二十三篇) 面向对象初级:静态属性、静态方法、类方法

    一.静态属性 静态属性相当于数据属性. 用@property语法糖装饰器将类的函数属性变成可以不用加括号直接的类似数据属性. 可以封装逻辑,让用户感觉是在调用一个普通的数据属性. 例子 class R ...

  9. 高负载PHP调优

    高负载PHP调优 针对PHP的Linux调优 调整文件描述符限制 # ulimit -n 1000000 # vi /etc/security/limits.conf # Setting Shell  ...

  10. 企业类Web原型制作分享-Kraftwerk

    这是一个设计师团队,将数码产品的创意发挥到极致.整个网站采用深黑色背景和图文搭配,网站有很多动画特效,均突出数码产品的质感.网站结合滚动区实现导航栏悬浮效果,用弹出面板实现点击弹出内容等交互效果. 本 ...