二分图概念
二分图定义:
二分图是图论中的一种特殊模型。设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(U,V),并且图中每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in U,j in V),则称图G是一个二分图
简而言之,就是顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集,两个子集内的顶点不相邻
二分图相关名词解释:
匹配:一个二分图存在一个子图,这个子图中的任意两条边都没有公共顶点,就将这个子图称为二分图的一个匹配
最大匹配:一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配
完全匹配:如果一个图的某个匹配中,所有的顶点都是匹配点,那么它就是一个完全匹配;显然,完全匹配一定是最大匹配;但并非每个图都存在完全匹配
最大匹配推论的相关定义
顶点覆盖:
在顶点集合中,选取一部分顶点,这些顶点能够把所有的边都覆盖了。这些点就是顶点覆盖集
最小顶点覆盖:
在所有的顶点覆盖集中,顶点数最小的那个叫最小顶点集合。
独立集:
在所有的顶点中选取一些顶点,这些顶点两两之间没有连线,这些点就叫独立集
最大独立集:
在左右的独立集中,顶点数最多的那个集合
路径覆盖:
在图中找一些路径,这些路径覆盖图中所有的顶点,每个顶点都只与一条路径相关联。
最小路径覆盖:
在所有的路径覆盖中,路径个数最小的就是最小路径覆盖了。
最大匹配相关结论
1.最大匹配数 = 最小顶点覆盖
证明:首先要明确的一点是最小顶点覆盖一定不会小于最大匹配数。显而易见,最大匹配中的每一个匹配都是不相邻的一条边,如果最大匹配数为n,那么至少需要n个顶点来覆盖这n条边。
2.最小边覆盖 = 顶点数 - 最小顶点覆盖
证明:设顶点数为 n ,最大匹配为 a。因为要使得边最少,所以先选择最大匹配的边(一次可以覆盖两个点) ,剩下的每个点都需要一条边去覆盖,设剩下的为 b = n -2 * a 。而最小边覆盖此时等于 a + b =n - a,证完。
3.最大独立集 = 顶点数 - 最大匹配数
证明:顶点中去除最大匹配的点剩下的就是孤立的点,就是最大独立集
最大团 = 补图的最大独立集
最小边覆盖 = 二分图最大独立集 = |V| - 最小路径覆盖
最小路径覆盖 = |V| - 最大匹配数
最小顶点覆盖 = 最大匹配数
最小顶点覆盖 + 最大独立数 = |V|
最小割 = 最小点权覆盖集 = 点权和 - 最大点权独立集
二分图判断
bool check()
{
memset(used,-1,sizeof(used));
queue<int>Q;
Q.push(1);
used[1]=0;
while(!Q.empty())
{
int now=Q.front();
for(int i=1;i<=n;i++) //遍历所有点
{
if(map[now][i]==0) //邻接矩阵存图
continue;
int v=i;
if(used[v]==-1)
{
used[v]=(used[now]+1)%2;
Q.push(v);
}
else
{
if(used[v]==used[now])
return false;
}
}
Q.pop();
}
return true;
}