图论——二分图1:二分图以及判定

简介: 图,有有向图,无向图,稠密图,简单图······算法,有贪心法,二分法,模拟法,倍增法······ 那,二分图是啥?二分法+有向图?  于是,我查了许多资料,才对它有一定了解。 二分图:二分图,是图论中的一种特殊模型,设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且同一集合中不同的两点没有边相连。

 

图,有有向图,无向图,稠密图,简单图······

算法,有贪心法,二分法,模拟法,倍增法······

 

那,二分图是啥?

二分法+有向图?

 

 

于是,我查了许多资料,才对它有一定了解。

 

二分图:二分图,是图论中的一种特殊模型,设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且同一集合中不同的两点没有边相连。

这就是二分图。

 

举个栗子吧:

 

 

这是不是二分图?

反正我第一次看觉得不是

其实,是的,他是二分图,尽管看上去是连着的。

 

若我们将图中的一些边转一下,变成:

 

这就是一个明显的二分图。

集合A与B中的点互不相连。

 

因此,在手动判定二分图时学会转边!

 

辣魔,二分图要用计算机判定怎么实现?

 

数竞大佬:简单!

!!!染色大法!!!

 

 

有没有熟悉的感觉

 

0表示还未访问,1表示在集合A中,2表示在集合B中。

 

col(color)储存颜色。

初始化为0.

上代码:

 

 其实是模板

可以记忆。

 1 vector <int> v[N];
 2 void dfs(int x,int y){
 3   col[x]=y;            
 4   for (int i=0; i<v[x].size(); i++) {
 5      if (!col[v[x][i]]) dfs(v[x][i],3-y);
 6      if (col[v[x][i]]==col[x]) FLAG=true;      //产生了冲突
 7   }
 8 }
 9 for (i=1; i<=n; i++) col[i]=0;    //初始化
10 for (i=1; i<=n; i++) if (!col[i]) dfs(i,1);    //dfs染色
11 if (FLAG) cout<<"NO"; else cout<<"YES";

 

下一章我们将讲到二分图的匹配,我们明天见。

相关文章
|
3月前
没有给出二分图两个左右点集时的二分图最大匹配
没有给出二分图两个左右点集时的二分图最大匹配
12 0
|
14天前
|
算法 测试技术 C#
【二分图】【二分图最大匹配】LCP 04. 覆盖
【二分图】【二分图最大匹配】LCP 04. 覆盖
|
2月前
|
机器学习/深度学习 测试技术
【图论】【状态压缩】【树】【深度优先搜索】1617. 统计子树中城市之间最大距离
【图论】【状态压缩】【树】【深度优先搜索】1617. 统计子树中城市之间最大距离
|
机器学习/深度学习 存储 算法
判断二分图
给定一个无向图graph,当这个图为二分图时返回true。 如果我们能将一个图的节点集合分割成两个独立的子集A和B,并使图中的每一条边的两个节点一个来自A集合,一个来自B集合,我们就将这个图称为二分图。 graph将会以邻接表方式给出,graph[i]表示图中与节点i相连的所有节点。每个节点都是一个在0到graph.length-1之间的整数。这图中没有自环和平行边: graph[i] 中不存在i,并且graph[i]中没有重复的值。
79 0
|
算法
短小精悍的多源最短路径算法—Floyd算法
在图论中,在寻路最短路径中除了Dijkstra算法以外,还有Floyd算法也是非常经典,然而两种算法还是有区别的,Floyd主要计算多源最短路径。
354 0
短小精悍的多源最短路径算法—Floyd算法
|
算法
染色法判定二分图算法模板
染色法判定二分图
44 0
|
算法
染色法判定二分图
复习acwing算法基础课的内容,本篇为讲解基础算法:染色法判定二分图,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。
91 0
染色法判定二分图
|
算法
匈牙利算法(二)
AcWing 861. 二分图的最大匹配
98 0
匈牙利算法(二)
|
算法
匈牙利算法(一)
复习acwing算法基础课的内容,本篇为讲解基础算法:匈牙利算法,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上。
82 0
匈牙利算法(一)
|
机器学习/深度学习 存储 算法
算法之单源最短路径
算法之单源最短路径
103 0
算法之单源最短路径

热门文章

最新文章