二分图
定义:
二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。
简而言之,就是顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属于这两个互不相交的子集,两个子集内的顶点不相邻。——百度百科
也就是可以像变成这个样子的图:
最大匹配:
定义
- 匹配:
给定一个边集 ,若 中任意两条边都没有公共端点,就称 是这个图的一个匹配。
图中所有的红色边就是其一个匹配。 - 最大匹配:
指所有匹配中边数最多的一个匹配。 - 交错路:
指一条路径,其中的每一条边交替地属于或不属于匹配。
上图中, 就是一条交错路。 - 增广路:
对于一条交错路,若它的起始顶点与终点都不在匹配中,则称它为增广路。
上图中, 就是一条增广路路。
如果将一条增广路取反,其匹配数加一。
在一个最大匹配中,不存在增广路。
做法
直接看图吧。
然后一直对左边的点这样钦定,当钦定到点
最后结果:
正确性显然,相当于在不断找增广路并将其取反。
复杂度:
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++; }
好像还有网络流做法可以更优,什么时候会了在更吧。
最小顶点覆盖
定义
定义一条边被覆盖当且仅当至少选中一个这条边的端点,最小顶点覆盖就是选中最少的点来覆盖所有的边
做法
定理:最小顶点覆盖等于最大匹配数。
可以感性理解一下。
最大独立集
定义
- 独立集:
若有一个点集其中所有的点两两之间没有边相连,则称这个点集为一个独立集。 - 最大独立集:
所有独立集中点数最多的一个称之为最大独立集。
做法
定理:最大独立集
考虑最小顶点覆盖已经覆盖了所有的边,所以剩下的点之间一定不会有边相连。
并且最小顶点覆盖已经是最小的了,所以不会有更优的情况。
最大团
定义
就是选出一个最大的集合,是这个集合中所有点两两之间有边相连。
注意区分最大比配和最大团,最大团没有要求一对一。
做法
直接建反图,求反图最大独立集即可。
本文来自博客园,作者:5k_sync_closer,转载请注明原文链接:https://www.cnblogs.com/xrlong/articles/17133482.html
版权声明:本作品采用 「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0) 进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了