二分图最小点覆盖等于二分图最大匹配

news/2024/10/23 1:57:14/文章来源:https://www.cnblogs.com/quanjun/p/18494237

二分图最小点覆盖与二分图最大匹配的关系

一、定义回顾

  1. 二分图最小点覆盖:
  • 给定一个二分图 \(G = (V, E)\),点覆盖是一个顶点集合 \(S \subseteq V\),使得对于每一条边 \(e \in E\),至少有一个端点在 \(S\) 中。二分图最小点覆盖就是所有点覆盖中顶点个数最少的那个点覆盖。
  1. 二分图最大匹配:
  • 在二分图 \(G = (V, E)\) 中,匹配是边的一个子集 \(M \subseteq E\),其中任意两条边没有公共顶点。二分图最大匹配是所有匹配中边的数量最多的匹配。

二、证明二分图最小点覆盖等于二分图最大匹配(König 定理)

构造性证明思路:

  • 设二分图 \(G = (V, E)\) 的两个顶点子集为 \(X\)\(Y\),最大匹配数为 \(m\)
  • 从一个最大匹配 \(M\) 开始,对于匹配边 \((x, y) \in M(x \in X, y \in Y)\),如果一个未匹配点 \(u\) 能通过交替路径(由匹配边和非匹配边交替组成的路径)到达另一个未匹配点 \(v\),就会产生增广路径,这与是最大匹配矛盾。

具体步骤:

  • 首先,对于最大匹配 \(M\) 中的每一条边 \((x, y)\) ,要么 \(x\) 在最小点覆盖中,要么 \(y\) 在最小点覆盖中。
  • 假设存在一条边 \(e = (x, y)\) ,使得和都不在我们选定的点覆盖中。因为 \(x\)\(y\) 都不在点覆盖中,所以存在一个匹配边 \(e' = (x', y')\),其中 \(x'\)\(x\) 在同一侧,\(y'\)\(y\) 在同一侧,且 \(x'\)\(y'\) 都在点覆盖中。但是这样就会出现矛盾,因为这条边没有被覆盖。
  • 然后,我们可以证明这样选定的点覆盖的大小等于最大匹配的大小。由于每一条匹配边都对应一个点在点覆盖中,而且不会有多余的点(否则会与最小性矛盾),所以

二分图最小点覆盖等于二分图最大匹配。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/819475.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构 - 树,三探之代码实现

本文介绍了使用数组和链表两种方式实现二叉树,包括初始化、节点操作(如获取、添加、删除)、以及遍历方法(前序、中序、后序、层次遍历)。测试代码已上传至代码库。书接上回,今天和大家一起动手来自己实现树。相信通过前面的章节学习,大家已经明白树是什么了,今天我们主…

不限次数无广告的短网址生成工具推荐

无论是在社交媒体、营销推广还是日常分享,短网址都能让我们更加便捷地分享内容。然而,在众多的短网址生成工具中,用户常常会遇到一些令人头疼的问题:跳转次数限制、插入广告等等。本文将为大家推荐一款不限次数且无广告的短网址生成工具——小码短链接,并详细介绍其优势。…

使用文件重定向

在Linux终端使用了下文件重定向在试的时候命令比较混乱,再重新捋一下:首先使用vim编辑器创建一个名为test.cpp的文件。 具体内容如下:然后使用g++ -o test test.cpp命令编译生成可执行文件test。接着使用vim编辑器创建了输入文件data.txt 具体内容如下:再运行命令./test &l…

The 2022 ICPC Asia Xian Regional Contest 前六题

VP一场,成都赛前找手感,这次还不戳,前三题略讲The 2022 ICPC Asia Xian Regional Contest 签到题题解 CFJ J. Strange Sum 易证最多只能选两个,从大到小排序后 \(\max(0, a_1) + \max(0, a_2)\) 即为所求。 void solve(){cin>>n;vector<ll>a(n+1);for(int i=1;…

利用数组处理批量数据

数组是一组有序数据的集合。数组中各数据的排列有一定规律,下标代表数据在数组中的序号 用一个数组名和下标来唯一的确定数组中的元素 数组中的每一个元素都属于同一个数据类型。不能把不同类型的数据放在同一个数组中 将数组和循环结合起来,可以有效的处理大批量的数据 怎样…

执行yum install 的时候提示【没有可用的软件包】的解决方案

这种情况,可能是yum 源不正确的问题,解决方案如下: 1.执行cd /etc/yum.repos.d,进入这个目录下,查看文件是否存在并检查文件内容的正确性 2、CentOS-Base.repo文件可以在网上下载一个,以下是范文# CentOS-Base.repo # # The mirror system uses the connecting IP addres…

MySQL安装-Linux系统

MySQL安装-Linux系统本文在此只介绍一种安装方式,其他安装方法可以查阅其他相关资料。 一、准备工作 1、下载MySQL社区版 官方网站:https://www.mysql.com/ ,找到下载DOWNLOADS,下载操作系统对应的社区版本。本文使用的数据库版本是5.7.41选择对应的MySQL版本和系统以及系统…

newc++file.cpp在哪

本人的newc++file.cpp文件在C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\VC\VCProjectItems可以在这个cpp文件里面自己选择是否写#define _CRT_SECURE_NO_WARNINGS 如果写了,则在visual studio中新建的cpp文件都有这个这个预处理命令主要是为…

Android13冻结进程分析:如何提高设备性能和用户体验

本文介绍了Android13中的冻结进程功能,它是一种重要的资源管理策略,可以提高系统性能和稳定性,同时最大限度地节省设备的资源和电池消耗。 文章讨论了如何合理分配资源,包括CPU、内存等,以提高设备性能和用户体验。此外,文章还提到了冻结进程对应用程序线程的影响,并介绍…

一图总结sql语言的最常用知识

一, 五大类sql语言DDL Data Definition Language, 数据定义语言,用于定义不同的数据字段、数据库、表、列、索引。如:create、drop、alter等DML Data Manipulation Language,数据操作语言,用于添加、删除、修改、查询数据的完整性。如:insert、 update 、 delete 等DQL Data…

10/22二叉树 求度为1的结点个数

include using namespace std; typedef struct BiNode { char data; struct BiNode* lchild, * rchild; }BiTNode, * BiTree; void CreateBiTree(BiTree& T)//创建一个二叉树 { char ch; cin >> ch; if (ch == #) T = NULL; else { T = new BiTNode; T->data = c…

初识封装

1.理解:“高内聚,低耦合” 高内聚即是说在内部繁琐的代码细节都由我们自己一人完成,包装起来,不让他人看见。而低耦合则是给用户一些较低的权限去使用软件。 2.铭记:属性私有,get/set 3.private:用于私有属性,与public形成反差,私有后的属性无法被随意调用。 如图: 4…