54、二分图的最大匹配

二分图的最大匹配

题目描述

给定一个二分图,其中左半部包含n1个点(编号1n1),右半部包含n2个点(编号1n2),二分图共包含m条边。

数据保证任意一条边的两个端点都不可能在同一部分中。

请你求出二分图的最大匹配数。

二分图的匹配:给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。

二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。

输入格式

第一行包含三个整数 n1、n2 和 m。

接下来m行,每行包含两个整数u和v,表示左半部点集中的点u和右半部点集中的点v之间存在一条边。

输出格式

输出一个整数,表示二分图的最大匹配数。

数据范围

1 ≤ n 1 , n 2 ≤ 500 , 1≤n1,n2≤500, 1n1,n2500,
1 ≤ u ≤ n 1 , 1≤u≤n1, 1un1,
1 ≤ v ≤ n 2 , 1≤v≤n2, 1vn2,
1 ≤ m ≤ 1 0 5 1≤m≤10^5 1m105

输入样例:2 2 4
1 1
1 2
2 1
2 2输出样例:2

Solution

import java.util.*;
import java.io.*;public class Main{static int N = 510;static int M = 100010;static int[] h = new int[N];static int[] e = new int[M];static int[] ne = new int[M];static int idx;// match 存储第二个集合中的每个点当前匹配的第一个集合中的点是哪个static int[] match = new int[N];// 表示第二个集合中的每个点是否已经被遍历过static boolean[] st = new boolean[N];public static boolean find(int x){for(int i = h[x]; i != -1; i = ne[i]){int j = e[i];if(!st[j]){st[j] = true;//如果对方还未被匹配 或者 匹配的对象能找到下家匹配if(match[j] == 0 || find(match[j])){match[j] = x;return true;}}}return false;}public static void add(int a, int b){e[idx] = b;ne[idx] = h[a];h[a] = idx++;}public static void main(String[] args) throws IOException{BufferedReader br = new BufferedReader(new InputStreamReader(System.in));String[] s = br.readLine().split(" ");int n1 = Integer.parseInt(s[0]);int n2 = Integer.parseInt(s[1]);int m = Integer.parseInt(s[2]);Arrays.fill(h, -1);while(m -- > 0){s = br.readLine().split(" ");int a = Integer.parseInt(s[0]);int b = Integer.parseInt(s[1]);// 因为是从第二个集合中找符合第一个集合的匹配// 所以即使是无向图,存一条边就够了add(a, b);}int res = 0;for(int i = 1; i <= n1; i++){Arrays.fill(st, false);if(find(i)){res++;}}System.out.println(res);}
}

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

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

相关文章

从list的模拟实现中了解迭代器的设计方式

欢迎来到博主的专栏&#xff1a;c杂谈 博主ID&#xff1a;代码小豪 文章目录 迭代器——容器与算法的桥梁容器与迭代器算法与迭代器迭代器总结 迭代器——容器与算法的桥梁 如果你尝试使用过STL&#xff0c;那么一定对迭代器不感到陌生&#xff0c;迭代器作为STL六大组件之一&…

QT 创建文件 Ui 不允许使用不完整类型,可以尝试添加一下任何头文件

#include "debug.h" #include "qmessagebox.h" #pragma execution_character_set("utf-8") //QT 创建文件 Ui 不允许使用不完整类型,尝试添加一下任何头文件&#xff0c;或者添加ui_xx.h头文件 debug::debug(QWidget *parent) : QDialog(p…

Kotlin getter 和 setter

文章目录 定义field 字段&#xff08;Backing Fields&#xff09; 定义 我们可以为变量定义get&#xff08;无参数&#xff0c;有与变量同类型的放返回值&#xff09;或set&#xff08;有一个与变量类型相同的参数&#xff0c;返回Unit&#xff09;函数&#xff0c;在取值&…

【MATLAB源码-第224期】基于matlab的快跳频系统仿真采用4FSK,模拟了单音干扰,宽带干扰以及部分频带干扰,输出误码率曲线以及各节点图像。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 跳频通信系统概述 跳频通信系统是一种通过快速切换载波频率来进行信息传输的无线通信技术。它在军事和商业通信中广泛应用&#xff0c;具有较强的抗干扰和抗截获能力。系统设计主要包括信号调制、跳频序列生成、信道模拟以及…

dart 基本语法

//入口方法 main() 或 void main() //数据类型 原生数据类型 String int double bool null 注意&#xff1a;String 包函 ‘’ “” ‘’’ ‘’’ 三种形式复杂数据类型 list Set Map自定义数据类型 class inheritance动态数据类型 var 注&#xff1a;dart 是静态类型语言&a…

【Linux】Centos7升级内核的方法:yum更新(ELRepo)

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

Proxyman 现代直观的 HTTP 调试代理应用程序

Proxyman 是一款现代而直观的 HTTP 调试代理应用程序&#xff0c;它的功能强大&#xff0c;使您可以轻松捕获、检查和操作 HTTP(s) 流量。不再让繁杂的网络调试工具阻碍您的工作&#xff0c;使用 Proxyman&#xff0c;您将轻松应对网络调试的挑战。 下载地址&#xff1a;https…

springboot undertow 文件上传文件过大异常

io.undertow.server.RequestTooBigException: UT000020 Connection terminated as request was larger than xxxx 修改yaml文件中关于undertow的配置项 server:undertow:# HTTP POST请求最大的大小# 默认0&#xff0c;无限制max-http-post-size: ${SERVER_UNDERTOW_MAX_HTTP_…

Elasticsearch 认证模拟题 - 10

一、题目 在索引 task8 中&#xff0c;写出满足以下条件的查询 title 中包含 my"或 me如果 tags 中包含 romatic movies&#xff0c;该条算分提高&#xff0c;如果不包含则算分不变。 PUT task8 {"mappings": {"properties": {"title":{…

Apple开发者macOS设备与描述文件Profile创建完整过程

安装并打开Apple Configurator 新建描述文件 输入macOS平台的描述文件的相关信息,然后选择证书 选择一个可用证书 存储描述文件 存储成功如下: 使用文本编辑器打开刚才保存的描述文件,找到设备名与UDID

Day12:rem 布局 和 less 使用

目标&#xff1a;使用 rem 和 less 完成移动端的布局。 一、移动 Web 基础 1、谷歌模拟器 在网页右键点“检查”或快捷键 F12&#xff0c;然后右边栏顶部第二个按钮切换设备为移动端&#xff0c;刷新网页&#xff0c;可以看到谷歌模拟器&#xff0c;可以切换模拟器型号、尺寸…

[已解决]ESP32-C3上传程序成功但没有反应的问题

ESP32-C3上传程序成功但没有反应的问题 ESP32-C3是一款功能强大的微控制器&#xff0c;常用于物联网&#xff08;IoT&#xff09;应用的开发和原型设计。然而&#xff0c;有时候在上传程序成功后&#xff0c;设备却没有任何反应&#xff0c;十分让人费解。通过各种尝试已解决这…

华为设备动态路由OSPF(单区域+多区域)实验

动态路由OSPF的配置 OSPF分类两种情况&#xff1a;单区域 多区域路由 OSPF单区域路由配置 OSPF&#xff1a;开放最短路径优先的路由协议。属于大型动态路由协议&#xff0c;适用于中大型的园区网。 网络拓扑&#xff1a; 配置步骤&#xff1a; 1.完成基本配置&#xff08;略&a…

《传感器系列》COD 传感器

环境监测小卫士&#xff1a;COD 传感器&#xff0c;能够精准检测化学需氧量。对于水质监测和环境保护有着至关重要的作用&#xff01; 优势解析&#xff1a; 一、实时监测与快速响应 COD传感器能够实现实时监测和快速响应&#xff0c;这是其最大的优势之一。传统的COD测定方法…

计算机网络-OSI七层参考模型与数据封装

目录 一、网络 1、网络的定义 2、网络的分类 3、网络的作用 4、网络的数据传输方式 5、网络的数据通讯方式 二、OSI七层参考模型 1、网络参考模型定义 2、分层的意义 3、分层与功能 4、TCP\IP五层模型 三、参考模型的协议 1、物理层 2、数据链路层 3、网络层 4…

ASP.NET Core的开发效率利器HotReload(带例子)

ASP.NET Core HotReload 示例 在 ASP.NET Core 中&#xff0c;HotReload 功能使开发者能够在不重新启动应用程序的情况下&#xff0c;动态地应用代码更改。这有助于提高开发效率&#xff0c;因为你可以立即看到代码更改的效果。以下是一个使用 HotReload 的示例&#xff1a; …

技术分享 | SpringBoot 流式输出时,正常输出后为何突然报错?

项目背景 一个 SpringBoot 项目同时使用了 Tomcat 的过滤器和 Spring 的拦截器&#xff0c;一些线程变量在过滤器中初始化并在拦截器中使用。该项目需要调用大语言模型进行流式输出。项目中&#xff0c;笔者使用 SpringBoot 的 ResponseEntity<StreamingResponseBody> 将…

R语言探索与分析14-美国房价及其影响因素分析

一、选题背景 以多元线性回归统计模型为基础&#xff0c;用R语言对美国部分地区房价数据进行建模预测&#xff0c;进而探究提高多元回 归线性模型精度的方法。先对数据进行探索性预处理&#xff0c;随后设置虚拟变量并建模得出预测结果&#xff0c;再使用方差膨胀因子对 多重共…

python panads读取保存数据

学习目标 能够使用Pandas读写文件中的数据 知道Pandas读取数据时常用参数index_col、parse_dates、sheet_name、index的作用和用法 知道Pandas和MySQL数据库进行读写交互的方法 1 读写文件 常用读写文件函数清单【查表】无需记忆 文件格式读取函数写入函数xlsxpd.read_exce…

SOLIDWORKS工艺软件 慧德敏学

SOLIDWORKS工艺软件功能介绍 1、快速制作工艺过程卡 a)调用模板&#xff0c;快速生成工艺过程卡中的工序、设备、简图以及工时等信息&#xff0c;支持“加工工艺卡”和“装配工艺卡”的制作 b)选择文件&#xff0c;快速读取现有工艺过程卡文件&#xff0c;提取数据并显示&…