【二分图】基础

本文介绍了二分图的概念,包括如何判断一个无向图是否为二分图,并提供了二分图判断的定理和染色思想。接着,讨论了二分图的最大匹配问题,阐述了最大匹配的定义,举例说明并解释了匈牙利算法及其应用场景。文章最后提到了一个具体的NOI2009竞赛题目,通过实例展示了如何应用二分图理论解决实际问题。
摘要由CSDN通过智能技术生成

概念(本片大部分来自蓝书):

一张无线图N个节点(N≥2)可以被分成A,B两个非空集合,其中A∩B=∅,并且在同一集合内的点之间都没有相连,那么这张无向图为一张二分图。A,B分别称为二分图的左部和右部。

判断

定理

一张无向图是二分图,当且图中不存在奇环(长度为奇数的环)

用染色进行二分图判断

思想

用黑白两种颜色标记图中的节点,当一个节点被标记后,它的所有相邻节点应该被标记为相反的颜色。若标记过程中产生冲突,则有奇环。复杂度O(n+m)

有什么用

个人感觉,这个判定,可能是你当题目看不出这个结论来时,试试能不能二分图。让你直接判断是不是二分图的题目一生也不会碰到很多的,或者题目有部分分有关于这种情况,那么这个判定会有点用……

模板(还是来源蓝书)

void dfs(int x,int color)
  赋值 v[x] ← color
  对于与x相连的每条无向边(x,y)
    if v[y]=0 than
      dfs(y,3-color)
    else if v[y] = color then
      判定无向图不是二分图,算法结束


int main()
 for i←1 to N
   if v[i] = 0 then dfs(i,1)
 判定无向图是二分图

例题

NOIP2010 关押罪犯

关押罪犯二分图解法


二分图最大匹配

概念

二分图中,包含边数最多的一组匹配被称为二分图的最大匹配

例子

比如哲♂学三兄弟想再找几个男朋友~(显然哲学三兄弟的朋友特别多)
在这里插入图片描述
那肯定是三兄弟选了
他们分别喜欢连线的男朋友
显然,为了能选到更多,肯定是这样最优
在这里插入图片描述
或者是这样
在这里插入图片描述
等等…………

但我们只要考虑最多有几个男生会被选中~
显然我吗可以推论出:
二 分 图 的 一 组 匹 配 S 是 最 大 匹 配 , 当 且 仅 当 图 中 不 存 在 S 的 增 广 路 二分图的一组匹配S是最大匹配,当且仅当图中不存在S的增广路 SS广
等等,这显然太快了……
增广路??

可增广路

在这里插入图片描述

匈牙利算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

非伪代码的模板:

#include<bits/stdc++.h>
using namespace std;
const int N
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值