「学习笔记」Hall定理

Descripition

设一张二分图两部点数为 (x,y),x<y,则其的一个完备匹配定义为 左部 x 个点成为匹配点

特别地,当 x=y 时,这类匹配也被称为完备匹配

一个如上定义的二分图存在 完备匹配 的充要条件是对于左部点的大小为 k 的任意子集 S,这些点在右部连到的点集(也被称为 S 的邻域,记为 N(S))大小不小于 k

Proof

首先证明必要性,如果一个点集的 N(S) 不足 |S|,那么该集合并不能找到一个完备匹配,与定义相反

其次是充分性,考虑使用归纳的手段,这部分分两种情况:

  • 如果存在一个严格子集 S 满足 S=N(S),则子集本身存在完备匹配

    如果删去 S,N(S) 后出现不满足条件的集合 T,那么在原二分图中取子集 ST,必然有 |N(ST)|<|ST|,与题设矛盾

    那么由此证明如果存在 |S|=|N(S)|Hall 定理成立

  • 如果所有子集的 |N(S)| 均大于 |S|,那么找到一个点 u 并找到 (u,v)E,删掉 u,vV,(u,),(,v)E

    不难发现此时剩下的二分图每个子集 S 都能满足 |N(S)||S|,而且因为删掉了一个点,问题是原问题的子问题

    根据归纳假设,Hall 定理在此情况下也成立


例题

CF1519F

对于所有子集 S,均需满足下式:

iSaij(iSLi)bj

那么把每个箱子和锁拆成 ai,bi 个点,每个箱子上每个点向每个锁的每个点连边

设箱子对应的点为左部点,若满足其有完美匹配,则上式成立

那么状压 DP 可以很好的解决这个问题:设 dp(i,S) 表示考虑了前 i 个箱子后,右部点 每个锁剩下的点数为 S

这里 S 使用五进制表示,实现每次暴力编码解码即可

转移考虑枚举当前箱子拆出来的点匹配右边的哪种点,匹配几个,注意产生匹配就要付出代价,但是只用付出一次

dfs 实现转移是容易的

合法状态并不能让复杂度达到 Θ(n×52n) 的上界,但是朴素 dfs 过了??

ARC076F

本题需要 Hall 定理的一个推论:一个任意二分图 (V,E) 的最大匹配为 |V|maxSV{|S||N(S)|}

该推论可能可以通过增广路和匈牙利算法理解

问题即求解 maxSV{|S|N(S)}

发现对于一个特定的点集 x,其结果就是 |S|maxiSLi(m+1miniSRi)

使用数据结构维护扫描线容易完成

posted @   没学完四大礼包不改名  阅读(1766)  评论(2编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示