Tutte theorem

图 \(G=(V,E)\) 有完美匹配当且仅当满足 \(\forall U\subseteq V,o(G-U)\le|U|,o(X)\) 表示 X 子图的奇连通块数。

Tutte–Berge formula

图 \(G=(V,E)\) 的最大匹配数为 \(\frac12\min\limits_{U\subseteq V}\{|U|-o(V-U)+|V|\}\)

Tutte 定理证明

必要性

如果 G 有完美匹配,那么每个奇连通块至少有一个点需要与 U 中的点匹配,故得证.

充分性

定义坏集 S 满足 \(|S|<o(G-S)\) ,那么图 G 中不能存在坏集。

如果 S 是 G 的坏集,那么 S 也一定是 G 的导出子图的坏集。

于是不妨令 G 满足 G 不存在完美匹配,且加入任意一条不在 G 中的边后存在完美匹配。

令 S 为满足度数为 \(|V|-1\) 的点集,首先考虑 \(G-S\) 中的每个连通块都是团的情况,容易发现 S 一定是坏集。

于是 \(G-S\) 中至少有一个连通块不是团,考虑把这个连通块扯出来讨论,我们找出其中两个没有边直接相连的点 \(x,y\) ,设从 \(x\rightarrow y\) 最短路上的头三个点为 \(a,b,c\) ,那么显然 \((a,c)\notin E\) ,且一定存在点 \(d\) 满足 \((b,d)\notin E\) 。

由于上面限制了 G 加入任意一条不在 G 中的边后都存在完美匹配,因此我们设 \(M_1\) 是 \((V,E\cup(a,c))\) 的一组完美匹配, \(M_2\) 是 \((V,E\cup(b,d))\) 的一组完美匹配,显然 \((a,c)\in M_1,(M_2)\in M_2\) (第一次走 \(M_1\) 的)。

然后定义 P 是在 G 上面从 d 出发,交替走 \(M_1,M_2\) 中的边得到的最长路径,显然最后会落在 \(a,b,c\) 点中的一个。

如果落在 b 点,我们令 \(C=P\cup(b,d)\) ,否则令 \(C=P\cup(a/c,b)\cup(b,d)\) ,这样 C 就是一个偶环,对于 C 我们选择不在 \(M_2\) 中的边可以形成一组新的匹配,对于 \(G-C\) 中的点我们按照 \(M_2\) 中的边匹配,这样就形成了一组新的完美匹配,故得证.

Tutte-Berge 公式与 Tutte 定理等价性证明

定义 \(def(G)\) 表示图 G 最大匹配中未被覆盖定点数, \(\nu(G)\) 表示 G 的最大匹配数,那么显然有 \(def(G)=|V|-2\nu(G)\).

Tutte-Berge formula \(\Rightarrow\) Tutte theorem

移项即可

Tutte theorem \(\Rightarrow\) Tutte-Berge formula

设 \(\delta'(G)=\max\limits_{U\subseteq V}\{o(V-U)-|U|\}\) ,并设 \(S\) 是取得最大值时的 \(U\) ,即证 \(\delta'(G)=def(G)\)。

显然有 \(\delta'(G)\ge0\) ,下面根据 \(\delta'(G)\) 的取值进行分类讨论。

  1. \(\delta'(G)=0\) ,那么满足 Tutte 定理的条件,整张图存在完美匹配, \(\delta'(G)=def(G)=0\)
  2. \(\delta'(G)>0\) ,那么一定有若干奇连通块存在点在 X 中未被覆盖,设该个数为 \(x\) ,\(o(G-X)=y\) ,那么一定满足 \(x\ge y-|X|\) 和 \(x\le def(G)\) ,因此 \(\delta'(G)\le def(G)\)成立。

    另一方面,考虑构造一个有 \(\delta'(G)=0\) 个点的完全图 H ,然后跟 G 拼一个新图 \(G'=(V_H\cup V_G,E_H\cup E_G\cup\{(u,v)|u\in V_H,v\in V_G\})\)

    容易在利用 Tutte 定理简单讨论后证明 G' 有完美匹配,因此 \(|V_H|=\delta'(G)\ge def(G)\) ,因此 \(\delta'(G)=def(G)\) ,故 Tutte-Berge 公式得证.

Tutte 定理与 Tutte–Berge 公式的更多相关文章

  1. zhengrui集训D1-D5笔记

    Day_1 计数 它咕掉了 Day_1 序列数据结构 它咕掉了 Day_2 线性代数 高斯消元\Large{高斯消元}高斯消元 普通版:略 模质数:求逆 模合数:exgcd 逆矩阵\Large{逆矩阵 ...

  2. hdu2255 二分图最大权配KM

    KM算法:hdu2255 (大概理解了 参考博客: http://blog.csdn.net/niushuai666/article/details/7171880)         所谓交错树:就是 ...

  3. Kuhn-Munkres算法 (剪辑)(备用)

    KM算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的. 设顶点Xi的顶标为A[i],顶点Yi的顶标为B[i],顶点Xi与Yj之间的边权为w[i,j]. 在算法执行 ...

  4. 从拟阵基础到 Shannon 开关游戏

    从拟阵基础到 Shannon 开关游戏 本文中的定理名称翻译都有可能不准确!如果有找到错误的同学一定要联系我! 本文长期征集比较好的例题,如果有比较典型的题可以联系我 目录 从拟阵基础到 Shanno ...

  5. R Language

    向量定义:x1 = c(1,2,3); x2 = c(1:100) 类型显示:mode(x1) 向量长度:length(x2) 向量元素显示:x1[c(1,2,3)] 多维向量:multi-dimen ...

  6. ACM/ICPC竞赛

    ACM知识点分类   第一类:基础算法 (1) 基础算法:枚举,贪心,递归,分治,递推,构造,模拟 (2) 动态规划:背包问题,树形dp,状态压缩dp,单调性优化,插头dp (3) 搜索:dfs,bf ...

  7. 【bzoj1041】圆上的整点

    题意 给定一个圆\(x^2+y^2=z^2\),求圆周上有多少个点的坐标是整数. \(r\leq 2*10^9\) 分析 这道题目关键要知道一些勾股数的性质,剩下的就很好处理了. 勾股数的性质 参考: ...

  8. POJ 2154 【POLYA】【欧拉】

    前记: TM终于决定以后干啥了.这几天睡的有点多.困饿交加之间喝了好多水.可能是灌脑了. 切记两件事: 1.安心当单身狗 2.顺心码代码 题意: 给你N种颜色的珠子,串一串长度问N的项链,要求旋转之后 ...

  9. 《程序设计中的组合数学》——polya计数

    我们在高中的组合数学中常常会碰到有关涂色的问题,例如:用红蓝两种颜色给正方形的四个顶点涂色,会有几种不同的方案.在当时,我们下意识的认为,正方形的四个顶点是各不相同的,即正方形是固定的.而实际上我们知 ...

随机推荐

  1. 有效提高java编程安全性的12条黄金法则

    安全性是软件开发中最复杂,最广泛和最重要的考量之一.Java是具有许多内置安全性功能的开发平台,java在长期的发展过程中,已经经过了很多高强度的安全测试,并经常更新安全漏洞.并且Java生态系统还包 ...

  2. js&jsp规范问题

    1.js初始化问题    一般与数据库交互的需要进行初始化,固定控件一般不需要初始化.有些需要整体浏览器页面校准的可能需要初始化.    //初始化操作按钮        $(function(){  ...

  3. Go Pentester - HTTP CLIENTS(4)

    Interacting with Metasploit msf.go package rpc import ( "bytes" "fmt" "gopk ...

  4. vue配置 less 全局变量

    在使用Vue开发的过程中,通常会用到一些样式的全局变量,如果在每个组件中引入就太繁琐了,维护性也不好,因此全局引入是个不错的想法.下面以less为例,记录一下全局引入less变量的步骤: 1.首先安装 ...

  5. JAVA集合一:ArrayList和LinkedList

    JAVA集合一:ArrayList和LinkedList 参考链接: HOW2J.CN 前言 这几篇博客重点记录JAVA的几个重要的集合框架:ArrayList.LinkedList.HashMap. ...

  6. C++语法小记---string类

    string类 #include <iostream> #include <string> using namespace std; // 实现字符串右移, 例子hello & ...

  7. win10里面怎么获取最高管理员权限

    Windows10专业版 1,按下win+R键唤出“运行”窗口,输入gpedit.msc. 2,这时打开了组策略编辑器,在左边找到“计算机配置-Windows 设置”,再进入右边“安全设置”,如图. ...

  8. ThinkPHP6 核心分析之Http 类跟Request类的实例化

    以下源码分析,我们可以从 App,Http 类的实例化过程,了解类是如何实现自动实例化的,依赖注入是怎么实现的. 从入口文件出发 当访问一个 ThinkPHP 搭建的站点,框架最先是从入口文件开始的, ...

  9. 小书MybatisPlus第7篇-代码生成器的原理精讲及使用方法

    本文是本系列文章的第七篇,前6篇访问地址如下: 小书MybatisPlus第1篇-整合SpringBoot快速开始增删改查 小书MybatisPlus第2篇-条件构造器的应用及总结 小书Mybatis ...

  10. Android多线程--AsyncTask

    常见的多线程方法有: 继承Thread类 实现Runnable接口 Handler AsyncTask HandlerThread 1.定义 一个Android已经封装好的轻量级异步类 属于抽象类,即 ...