二分图,匹配(学习笔记)

染色法判断二分图(二部图)

染色法判定二部图基本思想:
1、任意选择一个节点,将其染成红色
2、循环操作:将红色节点的邻居染成蓝色,将蓝色节点的邻居染成红色
3、若过程中发现任意一节点与其邻居的颜色相同,则该图不是二部图,否则是二部图。

核心代码:

int dfs(int u, int c) {color[u] = c;for (int i = h[u]; i != -1; i = ne[i]) {int j = e[i];if (!color[j]) {if (!dfs(j, 3 - c)) return 0;}else if (color[j] == c) return 0;}return 1;
}

 

二分图最大匹配

372. 棋盘覆盖(匈牙利算法,二分图最大匹配)-CSDN博客

861. 二分图的最大匹配(匈牙利算法, 二分图的最大匹配)-CSDN博客

“任意两条边都没有公共端点”的边的集合被称为图的一组匹配,在二分图中,包含边数最多的一组匹配被称为二分图的最大匹配

对于任意一组匹配 S ( S 是一个边集),属于 S 的边被称为“匹配边”, 不属于 S 的边被称为“非匹配边” 。匹配边的端点被称为“匹配点”, 其他节点被称为“非匹配点”。 如果在二分图中存在一条连接两个非匹配点的路径 path , 使得非匹配边与匹配边在 path 上交替出现,那么称 path 是匹配 S 的增广路, 也称交错路。

增广路显然具有以下性质:

1.长度 len 是奇数。
2.路径上第1,3,5,……, len 条边是非匹配边,第 2,4,6,… ,len-1 条边是匹配边。

正因为以上性质,如果我们把路径上所有边的状态取反,原来的匹配边变成非匹配的,原来的非匹配边变成匹配的,那么得到的新的边集 S` 仍然是一组匹配,并且匹配边数增加了1。进一步可以得到推论:
二分图的一组匹配 S 是最大匹配,当且仅当图中不存在 S 的增广路。

匈牙利算法

1. **初始化:** 对于给定的二分图,将每个顶点的标记初始化为未匹配。

2. **从左侧开始:** 从二分图的左侧开始,对每个未匹配的顶点尝试找到增广路径。

3. **寻找增广路径:** 从当前未匹配的左侧顶点开始,尝试沿着未匹配的边找到增广路径。增广路径是一条交替经过未匹配边和已匹配边的路径。

4. **增广路径存在:** 如果找到增广路径,则根据增广路径更新匹配关系。更新的方式是将路径上的已匹配边变为未匹配,未匹配边变为已匹配。

5. **增广路径不存在:** 如果无法找到增广路径,说明当前左侧顶点已经无法找到匹配,此时需要尝试调整之前的匹配,即修改之前已匹配的边。

6. **调整匹配:** 通过调整匹配,使得右侧的顶点重新可以匹配。具体做法是选择已匹配边中的一条,然后尝试寻找增广路径。

7. **重复步骤2-6:** 重复进行步骤2到步骤6,直到无法找到更多的增广路径为止。

8. **结束:** 当无法再找到增广路径时,算法结束。此时已经找到了二分图的最大匹配。

核心代码:

主函数中的代码:

for (int i = 1; i <= n1; i++) {memset(st, 0, sizeof st);if (find(i)) {ret++;}}

函数 

 
int find(int u) {for (int i = h[u]; i != -1;i=ne[i]) {int j = e[i];if (!st[j]) {st[j] = 1;//如果点 j 还没有被匹配,或者find(match[j])能为与j匹配的点找到新的下家if (match[j] == 0 || find(match[j])) {match[j] = u;return 1;}}}return 0;
}

 

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

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

相关文章

Golang-Map有序输出——使用orderedmap库实现

前言 工作中遇到一个问题&#xff1a;需要导出一个MySQL表格&#xff0c;表格内容由sql查询得来。但现在发现&#xff0c;所导出的表格中&#xff0c;各列的顺序不确定。多次导出&#xff0c; 每一次的序列顺序也是不定的。 因此确定是后端&#xff0c;Map使用相关导致的问题。…

HarmonyOS 鸿蒙应用开发(九、还是蓝海,如何贡献第三方库)

快来共享第三方库吧&#xff0c;不但可以通过分享自己的成果&#xff0c;可以获得来自全球开发者的技术反馈和建议&#xff0c;提升自身技术能力&#xff0c;还有助于提高个人或团队在开源社区中的知名度和影响力。在流量时代和粉丝经济时代&#xff0c;获得曝光度和流量密码。…

全球首款轻量化图形引擎强势来袭!!!!

AMRT 3D 数字孪生引擎 提供强大完整的工具链 AMRT3D包含开发引擎、资源管理、场景编辑、UI搭建、项目预览和发布等项目开发所需的全套功能&#xff0c;并整合了动画路径、精准测量、动态天气、视角切换和动画特效等工具。 轻量化技术应用与个性化定制 AMRT3D适用于快速开发…

【SQL高频基础】1141.查询近30天活跃用户数

题目&#xff1a; 表&#xff1a;Activity ------------------------ | Column Name | Type | ------------------------ | user_id | int | | session_id | int | | activity_date | date | | activity_type | enum | ------------------------…

(已解决)vueQQ邮箱注册发送验证码前端设计,如何发送验证码设计倒计时

我们之前已经通过前端测试成功完成qq邮箱动态验证码发送&#xff08;未使用redis&#xff0c;我准备自己了解完后&#xff0c;后期有时间补上&#xff09; 衔接文章&#xff1a; 1&#xff1a; spingboot 后端发送QQ邮箱验证码 2&#xff1a; 这段代码建设图形化界面 <di…

CentOS7搭建k8s-v1.28.6集群详情

文章目录 1.灌装集群节点操作系统1.1 设置hosts1.2 设置nameserver1.3 关闭防火墙1.4 关闭Selinux1.5 关闭Swap分区1.6 时间同步1.7 调整内核参数1.8 系统内核升级 2.安装Docker2.1 卸载旧Docker2.2 配置Docker软件源2.3 安装Docker 3.部署Kubernets集群3.1 设置 K8s 软件源3.2…

LINUX设置时间

先察看支持什么格式 此处h是故意报错用的。 $ date -h date: invalid option -- h BusyBox v1.31.1 (2023-04-25 18:55:34 PDT) multi-call binary.Usage: date [OPTIONS] [FMT] [TIME]Display time (using FMT), or set time[-s,--set] TIME Set time to TIME-u,--utc …

2024.1.26力扣每日一题——边权重均等查询

2024.1.26 题目来源我的题解方法一 使用dfs对每一组查询都求最近公共祖先&#xff08;会超时&#xff0c;通不过&#xff09;方法二 不需要构建图&#xff0c;直接在原始数组上进行求最大公共祖先的操作。 题目来源 力扣每日一题&#xff1b;题序&#xff1a;2846 我的题解 …

Python绘制随机游走图

Python绘制随机游走图 文章目录 Python绘制随机游走图随机游走图随机游走图的意义Python实现随机游走图Python随机游走图案例random_walk.pymain.py运行结果图结果一结果二结果三结果四结果五 总结 随机游走图 随机游走图通常指的是一种图论中的模型&#xff0c;其中节点在图中…

基于BiLSTM-CRF模型的分词、词性标注、信息抽取任务的详解,侧重模型推导细化以及LAC分词实践

基于BiLSTM-CRF模型的分词、词性标注、信息抽取任务的详解,侧重模型推导细化以及LAC分词实践 1.GRU简介 GRU(Gate Recurrent Unit)门控循环单元,是[循环神经网络](RNN)的变种种,与 LSTM 类似通过门控单元解决 RNN 中不能长期记忆和反向传播中的梯度等问题。与 LSTM 相…

Linux前后端程序部署

1.总述 首先安装包类型分为 二进制发布包安装:找到对应自己的linux平台版本(CentOS还是redhat等),的具体压缩文件,解压修改配置 源码编译安装:需要自己进行编译 对于redhat安装包,可以使用rpm命令进行安装,但是rpm命令安装不能够解决依赖库的问题,常用的rpm命令,只用于卸载…

华为视频监控接入到视频监控平台 (华为网路监控摄像机IPC和华为视频节点设备VCN)

目 录 一、设备介绍 1.1 华为VCN介绍 1.2 AS-V1000视频监控平台介绍 1.3 平台服务器配置说明 二、安装、配置HW_IVS软件 2.1下载安装HW_IVS软件 2.2登录HW_IVS 2.3共享到外域 三、配置华为外域参数 3.1 PCG模块设置 3.2通信协议GBT28181配置 3.3传…

netty-websocket扩展协议及token鉴权补充

文章源码&#xff1a;gitee 源码部分可以看上一篇文章中的源码分析netty-websocket 鉴权token及统一请求和响应头&#xff08;鉴权控制器&#xff09; 最近刚好没事&#xff0c;看到有朋友说自定义协议好搞&#xff0c;我就想了想&#xff0c;发现上面那种方式实现确实麻烦&…

django解决Table ‘xx‘ already exists的方法

1&#xff0c;首先看已存在的这个库表结构是什么样的&#xff0c;先让对应的model.py恢复到和他一样的字段 2&#xff0c;删除对应app下的migrations目录里面除__init__.py文件的其他所有文件 3&#xff0c;回到manage.py所在目录执行python manage.py makemigrations 4&#x…

远程桌面使用Pr剪视频

要远程访问高性能计算机并使用 Pr&#xff08;Adobe Premiere Pro&#xff09;进行视频编辑&#xff0c;您可以考虑使用流畅且响应迅速的远程桌面软件。您可以考虑以下选项。 Splashtop Business Access Performance Splashtop 以其高性能远程桌面解决方案而闻名&#xff0c;…

Sping常见注解使用方法----持续更新中20240116

持续更新中~可以关注哦 底下也有博主碰到这些问题的项目具体操作时的原文。 目录 Data&#xff1a; requestbody ExceptionHandler ResponseBody WebFilter(filterName "loginCheckFilter",urlPatterns "/*") Data&#xff1a; 通用返回结果,服…

HarmonyOS远程真机调试方法

生成密钥库文件 打开DevEco Studio&#xff0c;点击菜单栏上的build&#xff0c; 填一些信息点击&#xff0c;没有key的话点击new一个新的key。 生成profile文件 AppGallery Connect (huawei.com) 进入该链接网站&#xff0c;点击用户与访问将刚生成的csr证书提交上去其中需…

day38WEB攻防-通用漏洞XSS跨站绕过修复http_onlyCSP标签符号

本章知识点&#xff1a; 1 、 XSS 跨站 - 过滤绕过 - 便签 & 语句 & 符号等 2 、 XSS 跨站 - 修复方案 -CSP& 函数 &http_only 等 配套资源&#xff08;百度网盘&#xff09; 链接&#xff1a;https://pan.baidu.com/s/12mLsvmU22dxueyAG0aqUhw?pwd6o…

地下停车场智慧监查系统:科技让停车更智能

随着城市化进程的加速&#xff0c;停车难成为了许多城市居民的痛点。而地下停车场作为解决停车难问题的重要手段&#xff0c;其安全性和便捷性也成为了人们关注的焦点。为了解决这一问题&#xff0c;山海鲸可视化搭建的地下停车场智慧监查系统应运而生&#xff0c;为车主们提供…

【极数系列】Flink集成KafkaSink 实时输出数据(11)

文章目录 01 引言02 连接器依赖2.1 kafka连接器依赖2.2 base基础依赖 03 使用方法04 序列化器05 指标监控06 项目源码实战6.1 包结构6.2 pom.xml依赖6.3 配置文件6.4 创建sink作业 01 引言 KafkaSink 可将数据流写入一个或多个 Kafka topic 实战源码地址,一键下载可用&#xf…