首页 > 其他分享 >二分图最大匹配的必须边和可行边

二分图最大匹配的必须边和可行边

时间:2023-11-21 19:34:09浏览次数:34  
标签:二分 完备 可行 匹配 最大 增广 必须

以下考虑完备匹配(非完备匹配要用到网络流)

给定一张二分图,其最大匹配方案不一定是唯一的。若任何一个最大匹配方案的匹配边都包括\((x,y)\),则称\((x,y)\)为二分图匹配的必须边。若\((x,y)\)至少属于一个最大匹配的方案,则称\((x,y)\)为二分图匹配的可行边

以下证明假设我们已经求出了一个最大匹配

在完备匹配时,一条边\((x,y)\)是必须边,必须同时满足以下两个条件:

1.在当前这个完备匹配的状态下,\((x,y)\)是匹配边

2.在当前这个完备匹配的状态下,去掉\((x,y)\)这条边之后,不能再找一条增广路,其起点是\(x\),终点是\(y\)

第一个条件是显然的,如果不是匹配边怎么可能是必须边,主要是证明一下第二个条件

如果去掉\((x,y)\)后,还能再找到这么一条增广路,那么我们把这条增广路取反,显然匹配数加一,此时等于最大匹配,而且这个最大匹配不再包含\((x,y)\)这一条边,所以\((x,y)\)不是必须边。如果去掉\((x,y)\)后,不能找到这么一条增广路,我们不妨重新排序把\(x\)和\(y\)这两个点放在最后,并且认为前面在跑匈牙利算法的时候跑出来的匹配情况与最开始的完备匹配去掉\((x,y)\)后剩下的边的匹配情况相同(匈牙利算法是不看顺序的,而且只执行一遍,故这个换序不会影响结果),现在我们再考虑\(x\)和\(y\)这两个点(此时,现在的这个图与最开始的完备匹配的那个图的差距仅仅是少了\((x,y)\)这一条边),如果找不到\(x\)到\(y\)的增广路,那么\(x\)肯定匹配失败,故不再是最大匹配,所以\((x,y)\)是必须边

其实必须边我自己还发现了一种算法

在完备匹配时,一条边\((x,y)\)是可行边,则满足以下两个条件之一:

1.在当前这个完备匹配的状态下,\((x,y)\)是匹配边

2.在当前这个完备匹配的状态下,\((x,y)\)是非匹配边。设当前\(x\)与\(u\)匹配,\(y\)与\(v\)匹配,那么连接\((x,y)\)后,\(u\)和\(v\)失去匹配,必须找到一条从\(u\)到\(v\)的增广路,来保证最大匹配不变

第一个条件显然。第二个条件可以像证必须边的第二个条件一样证明,这个时候把\(u\)和\(v\)放到最后就可以了

如果我们把二分图中的非匹配边看作从左部到右部的有向边,把二分图中的匹配边看作从右部到左部的有向边,构成一张新的有向图,那么原图中从\(x\)到\(y\)有增广路等价于新图中存在从\(x\)到\(y\)的路径。这一个用充分必要性证明就可以了,比较简单

因此,必须边的判定条件是:\((x,y)\)是原图的匹配边,并且\(x\)和\(y\)两点在新图中属于不同的SCC

可行边的判定条件是:\((x,y)\)是原图的匹配边,或者\(x\)和\(y\)两点在新图中属于相同的SCC

标签:二分,完备,可行,匹配,最大,增广,必须
From: https://www.cnblogs.com/dingxingdi/p/17847380.html

相关文章

  • 2023.11.21做题笔记(对局匹配,砝码称重shui,单词接龙)
    今天水了一节英语课,翘了一节C++课,就是感觉摆的一批。 对局匹配P8656[蓝桥杯2017国B]对局匹配-洛谷|计算机科学教育新生态(luogu.com.cn)   对于这道题:大佬解法1:#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+5;intn,k,a[N],an......
  • 二分查找
    算法入门第一题   二分查找思路:在一个升序的list中,用中间数(mid)来进行匹配,如果target比中间数大,说明target在list右边,left=mid+1,如果target比中间数小,说明target在list左边,right=mid-1fromtypingimportListclassSolution:defsearch(self,nums:List[int],t......
  • Java学习—二分法查找(一)
    1、二分查找(binarysearch)二分查找(binarysearch),也称折半搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且......
  • 路由匹配
    #路由匹配url(r'test',views.test),url(r'testadd',views.testadd)"""url方法第一个参数是正则表达式 只要第一个参数正则表达式能够匹配到内容那么就会立刻停止往下匹配 直接执行对应的视图函数你在输入url的时候会默认加斜杠 django内部帮你做到重定向 一次匹配不行 url后......
  • 二分查找
    一、二分查找介绍首先使用二分法的前提是这个数组或者序列是排好序的。对于一个排好序的数组(升序),如果要让我们从中找一个指定的数并输出它的下标,我们可以直接暴力枚举,时间复杂度为O(n),当我们使用二分查找的时候它的时间复杂度为O(logn)二分法的核心思想就是:每次都将查询的范围......
  • C++U4-第05课-二分查找
    上节课作业部分(点击跳转)  引入分治算法概念  二分法分治思想编程题  二分查找能解决的问题不仅仅是找到一个值 题1: 要在一个有序序列中查找一个数,可以使用二分算法。include<iostream>usingnamespacestd;intBinarySearch(inta[],intl,......
  • 第 372 场周赛(位运算技巧,跳表 + 二分,线段树)
     classSolution:deffindMinimumOperations(self,s1:str,s2:str,s3:str)->int:cnt=0fora,b,cinzip(s1,s2,s3):ifnota==b==c:breakcnt+=1ifcnt==0:......
  • haproxy的acl匹配方式详解+配置案例
    方法一:在HAProxy中,ACL(AccessControlLists)用于基于条件进行请求的过滤和路由。ACL可以根据不同的条件来匹配请求,比如来源IP地址、HTTP头部、URL路径等。一旦定义了ACL,你可以将其与后端服务器池、前端监听器等进行关联,以便根据条件来决定如何处理请求。以下是一些常见的AC......
  • Navicat Premium 16 安装并激活图文教程(亲测可行)
    NavicatPremium16安装并激活图文教程(亲测可行)写在前面:网上的po_jie套路很雷同,但是目前官网下载的NavicatPremium16软件包已经修复了永久激活的bug(网上流传的激活方式不行了),这里提供未更新前的软件安装包(可以永久激活)。一、下载安装包navicat161_premium_cs_x64.exe:ht......
  • rust程序设计(6)枚举与模式匹配
    rust中的枚举有什么用?枚举可以嵌入类型的好处是什么你可以在同一个枚举中既有单个值,也有元组或结构体。枚举的每个变体可以拥有不同数量和类型的关联数据。这增加了类型的灵活性和表达力,使你能够更精确地建模你的数据。我知道rust可以为枚举创建方法,那在哪种场景下枚举会比......