二分图

定义:

二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。
简而言之,就是顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集,两个子集内的顶点不相邻。——百度百科

也就是可以像变成这个样子的图:
image

最大匹配:

定义

  1. 匹配:
    给定一个边集 S ,若 S 中任意两条边都没有公共端点,就称 S 是这个图的一个匹配。
    image
    图中所有的红色边就是其一个匹配。
  2. 最大匹配:
    指所有匹配中边数最多的一个匹配。
  3. 交错路:
    指一条路径,其中的每一条边交替地属于或不属于匹配。
    上图中, 628 就是一条交错路。
  4. 增广路:
    对于一条交错路,若它的起始顶点与终点都不在匹配中,则称它为增广路。
    上图中, 17510 就是一条增广路路。
    如果将一条增广路取反,其匹配数加一。
    在一个最大匹配中,不存在增广路。

做法

直接看图吧。
image
然后一直对左边的点这样钦定,当钦定到点 4 时,发现没有没匹配过的右边点与其匹配。
image
最后结果:
image
正确性显然,相当于在不断找增广路并将其取反。
复杂度:Θ(nm)

COED
bool match(int x){
if(vis[x]) return false;
vis[x]=1;
For_to(i,x){
int y=to[i];
if(!ism[y]||match(ism[y])){ism[y]=x;return true;}
}
return false;
}
//主函数
for(int i=1;i<=n;i++){
memset(vis,0,sizeof vis);
if(match(i)) ans++;
}

好像还有网络流做法可以更优,什么时候会了在更吧。

最小顶点覆盖

定义

定义一条边被覆盖当且仅当至少选中一个这条边的端点,最小顶点覆盖就是选中最少的点来覆盖所有的边

做法

定理:最小顶点覆盖等于最大匹配数。

可以感性理解一下。

最大独立集

定义

  1. 独立集:
    若有一个点集其中所有的点两两之间没有边相连,则称这个点集为一个独立集。
  2. 最大独立集:
    所有独立集中点数最多的一个称之为最大独立集。

做法

定理:最大独立集 = 所有顶点数 最小顶点覆盖。

考虑最小顶点覆盖已经覆盖了所有的边,所以剩下的点之间一定不会有边相连。
并且最小顶点覆盖已经是最小的了,所以不会有更优的情况。

最大团

定义

就是选出一个最大的集合,是这个集合中所有点两两之间有边相连。

注意区分最大比配和最大团,最大团没有要求一对一。

做法

直接建反图,求反图最大独立集即可。

posted @   5k_sync_closer  阅读(41)  评论(1编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示