浅谈二分图

news/2024/10/14 18:14:14

定义

二分图,又称二部图,英文名叫 Bipartite graph。

二分图是什么?节点由两个集合组成,且两个集合内部没有边的图。

换言之,存在一种方案,将节点划分成满足以上性质的两个集合。

img

性质

  • 如果两个集合中的点分别染成黑色和白色,可以发现二分图中的每一条边都一定是连接一个黑色点和一个白色点。
  • 二分图不存在长度为奇数的环,因为每条边的 \(u\) 在一个集合, \(v\) 在另一个集合,所以想要从一个点出发,再回到这个点可能经过偶数条边。

应用

二分图最大匹配

增广路算法 (Augmenting Path Algorithm)

假设有 \(n\) 个顶点,\(m\) 条边。

因为增广路长度为奇数,路径起始点非左即右,所以我们先考虑从左边的未匹配点找增广路。 注意到因为交错路的关系,增广路上的第奇数条边都是非匹配边,第偶数条边都是匹配边,于是左到右都是非匹配边,右到左都是匹配边。 于是我们给二分图 定向,问题转换成,有向图中从给定起点找一条简单路径走到某个未匹配点,此问题等价给定起始点 \(s\) 能否走到终点 $t $ 。 那么只要从起始点开始 DFS 遍历直到找到某个未匹配点,\(O(m)\)。未找到增广路时,我们拓展的路也称为 交错树

代码

#include <bits/stdc++.h>
using namespace std;
int n,m,t,book[505],match[505];
vector <int> e[505]; 
int dfs(int x,int tag)
{if(book[x]==tag)return 0;book[x]=tag;for(auto v : e[x]){if((match[v]==0)||dfs(match[v],tag))//这个人还没有选或者让与它连边的点换一个点连边{match[v]=x;return 1;//匹配成功}}return 0;
}
int main()
{scanf("%d%d%d",&n,&m,&t);for(int i=1;i<=t;i++){int u,v;scanf("%d%d",&u,&v);e[u].push_back(v);}int sum=0;for(int i=1;i<=n;i++){if(dfs(i,i)){sum++;}}cout<<sum;return 0;
}

二分图最小点覆盖(König 定理)

最小点覆盖:选最少的点,满足每条边至少有一个端点被选。

二分图中,最小点覆盖 \(=\) 最大匹配。

二分图最大独立集

最大独立集:选最多的点,满足两两之间没有边相连。

因为在最小点覆盖中,任意一条边都被至少选了一个顶点,所以对于其点集的补集,任意一条边都被至多选了一个顶点,所以不存在边连接两个点集中的点,且该点集最大。因此二分图中,最大独立集 \(=\) \(n-\)最小点覆盖。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

STEAM游戏无法使用手柄控制

最近悟空特火,用Win10电脑Steam平台玩游戏想使用以前的手柄,发现无法操作。还以为是游戏或者手柄问题。 在系统的硬件设备那里可以看到手柄已连接,也在网页上测试了手柄各个按键都没有问题。下面是测试网址,实在是太棒了,不用下载第三方测试工具。 手柄测试(Gamepad Teste…

禁止ZBlog输出页面运行信息

使用 ZBlog 的朋友们无一不知,zb 程序通常都会默认在源代码的底部输出诸如页面运行时长等有关网站的运行相关信息。 只要查看一下本站的源代码,就能够清晰地发现其最底部存在类似于<!--63.16 ms, 8 query, 3305kb memory, 0 error-->这样的代码。 此信息虽说不会在正常…

C# 给Word每一页设置不同图片水印

Word中设置水印时,可加载图片设置为水印效果,但通常添加水印效果时,会对所有页面都设置成统一效果,如果需要对每一页或者某个页面设置不同的水印效果,则可以参考本文中的方法。下面,将以C#代码为例,对Word每一页设置不同的图片水印效果作详细介绍。 方法思路 在给Word每…

PHP开启openssl的方法

如果主机没有开启openssl,那么ZBlog在启用主题或者插件会提示:Call to undefined function openssl_pkey_get_public() 开启openssl的方法: 打开php.ini搜索extension=php_openssl.dll 将这段代码前边的【;】符号去掉,保存。如果不存在这行,那么添加extension=php_openssl…

关于Allowed memory size of (PHP内存溢出)错误的可能原因及解决方案

部分站点会出现PHP内存溢出错误,此错误多见于有大量文章的采集站点。报错信息类似:Allowed memory size of 123456 bytes exhausted (tried to allocate 1234 bytes)。 将其(注释或删除)即可解决扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各种CMS,…

ZBlog插件开发文件结构(插件)

以下基于通过「创建应用」生成的初始文件: /path/zb_users/plugin/demoPlugin │ logo.png [必需]图标,128x128; │ plugin.xml [必需]自述文件; │ main.php [可选]应用内置管理页,在创建插件时填写才会生成; │ include.php [可选]应用嵌入页,…

ZBlog模板内使用PHP

在相应内容输出前,可以使用如下语法额外对数据进行处理; {php} // 这里可以写原生 PHP; $myVar = "变量值"; {/php} <p>输出一个自定义变量:{$myVar}</p> <p>当前 Z-BlogPHP 版本是:{$version}</p>//还可以用<?php ?>符号在{ph…

ZBlog开启固定域名功能

使用空间面板的文件管理或者 FTP 修改文件:path/zb_users/c_option.php;配置项:ZC_PERMANENT_DOMAIN_FORCED_URL => "https://www.newdomin.site/",path:当前博客程序所放置的路径,比如/home/wwwroot/www.zblogcn.com; 注:如果是 1.6.0 之前的版本,请覆盖…