P3386 【模板】二分图最大匹配——匈牙利算法

news2024/11/15 13:29:41

【模板】二分图最大匹配

题目描述

给定一个二分图,其左部点的个数为 n n n,右部点的个数为 m m m,边数为 e e e,求其最大匹配的边数。

左部点从 1 1 1 n n n 编号,右部点从 1 1 1 m m m 编号。

输入格式

输入的第一行是三个整数,分别代表 n n n m m m e e e

接下来 e e e 行,每行两个整数 u , v u, v u,v,表示存在一条连接左部点 u u u 和右部点 v v v 的边。

输出格式

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

样例 #1

样例输入 #1

1 1 1
1 1

样例输出 #1

1

样例 #2

样例输入 #2

4 2 7
3 1
1 2
3 2
1 1
4 2
4 1
1 1

样例输出 #2

2

提示

数据规模与约定

对于全部的测试点,保证:

  • 1 ≤ n , m ≤ 500 1 \leq n, m \leq 500 1n,m500
  • 1 ≤ e ≤ 5 × 1 0 4 1 \leq e \leq 5 \times 10^4 1e5×104
  • 1 ≤ u ≤ n 1 \leq u \leq n 1un 1 ≤ v ≤ m 1 \leq v \leq m 1vm

不保证给出的图没有重边

分析

  1. 此题就是匈牙利算法的板题,用于求一个二分图的最大匹配数;
  2. 匈牙利算法的过程就是:枚举左部的所有点,对于左部的每一个点,去枚举它的邻边v,判断v是否已匹配(女生已心有所属),如果没有匹配,或者说女生的现男友可以换个对象(实际就是个递归的过程,dfs他的现男友,看看能否换一个女朋友),那么这个女生v就可以和这个男生u匹配,return true;

在这里插入图片描述

在这里插入图片描述

#include <bits/stdc++.h>

using namespace std;

const int N = 510, M = 50010;
int h[N], e[M], ne[M], idx;
int n, m, edge;
int vis[N];
int match[N];//右边的点所对应的点,也就是右边的妹子现在和谁在一块

void add(int a, int b) {
    e[++idx] = b, ne[idx] = h[a], h[a] = idx;
}

bool dfs(int u) {
    for (int i = h[u]; ~i; i = ne[i]) {
        int v = e[i];
        if (!vis[v]) {//这个v(女生)之前没判断过
            vis[v] = 1;
            //如果这个妹子没有匹配到男生 或者 可以让匹配的男生match[v]去找下家
            if (match[v] == 0 || dfs(match[v])) {
                match[v] = u;
                return true;
            }
        }
    }
    return false;
}

int main() {
    cin >> n >> m >> edge;
    memset(h, -1, sizeof h);
    for (int i = 0; i < edge; ++i) {
        int a, b;
        cin >> a >> b;
        add(a, b);
    }
    int ans = 0;
    for (int i = 1; i <= n; ++i) {
        memset(vis, 0, sizeof vis);
        if (dfs(i))
            ans++;
    }
    cout << ans;
    return 0;
}

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

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

相关文章

文件描述符表、文件结构表和文件节点(SylixOS 学习笔记-更新中)

文件描述符表、文件结构表和文件节点 文件描述符表&#xff1a;每个进程都维护着自己的一个文件描述符表&#xff0c;每个文件描述符占其中一。该表记录进程打开的文件相关信息&#xff0c;因文件描述符为进程所有&#xff0c;文件描述符表也为进程内共享&#xff1b;文件表结构…

CDGA|把握三个“着眼点”,实现数据要素治理市场高质量发展

12月19日&#xff0c;国家发改委发文解读《意见》时指出&#xff0c;数据要素安全治理作为数据基础制度的四大组成部分之一&#xff0c;贯穿数据流通交易的各个环节&#xff0c;涉及数据要素市场培育的方方面面&#xff0c;发挥着不可替代的重要作用既有利于保障国家数据安全&a…

视频网站节约 30% 成本的秘密在这里

今年&#xff0c;爱奇艺宣布2022年第一季度首次实现季度盈利&#xff0c;这是爱奇艺在过去三个季度中&#xff0c;毛利率持续增长&#xff0c;且运营费用持续下降带来的结果。长视频行业发展十几年来&#xff0c;一直深陷亏损旋涡。爱奇艺的首次实现季度盈利&#xff0c;也意味…

多重背包问题(详解二进制优化原理)

多重背包问题及优化&#xff08;详解优化原理&#xff09;一、问题描述二、思路分析1、状态转移方程&#xff08;1&#xff09;状态表示&#xff1a;&#xff08;2&#xff09;状态转移&#xff1a;2、循环设计三、代码模板1、朴素版2、优化版一、问题描述 二、思路分析 这道题…

JVM垃圾回收机制

目录 目录 前言 一. GC (垃圾回收机制) STW问题 二. GC 回收哪部分内存 三. 具体怎么回收 1. 先找出垃圾 a.引用计数 b. 可达性分析 2. 回收垃圾 a. 标记清除 b. 复制算法 c. 标记整理 d. 分代回收 前言 我们都知道 Java 运行时内存的各个区域. 对于程序计数器 …

数据库与身份认证:在项目中操作 MySQL

在项目中操作数据库的步骤 ①安装操作 MySQL 数据库的第三方模块&#xff08;mysql&#xff09; ②通过 mysql 模块连接到 MySQL 数据库 ③通过 mysql 模块执行 SQL 语句 安装与配置 mysql 模块 1. 安装 mysql 模块 mysql 模块是托管于 npm 上的第三方模块。它提供了在 Nod…

智能wifi小车-RGB三色LED灯驱动

RGB三色LED灯简介 RGB指的就是三基色光&#xff0c;R红色&#xff0c;G绿色&#xff0c;B蓝色。LED芯片所发出的光一般都是蓝光&#xff0c;都是要通过红 绿 蓝这三种颜色的荧光粉去调颜色的。RGB色彩模式是工业界的一种颜色标准&#xff0c;是通过对红(R)、绿(G)、蓝(B)三个颜…

首创证券将在上交所上市:募资约19亿元,规模不及信达证券

12月22日&#xff0c;首创证券股份有限公司&#xff08;下称“首创证券”&#xff0c;SH:601136&#xff09;将在上海证券交易所主板上市。本次上市&#xff0c;首创证券的发行价格为7.07元/股&#xff0c;发行市盈率22.98倍&#xff0c;发行数量为2.73亿股&#xff0c;募资总额…

JavaSE14-数组

目录 1.数组基本用法 1.1.什么是数组 1.2.数组声明 1.3.数组的创建与初始化 1.3.1.基本类型数组 1.3.2.对象数组 1.4.数组的使用 1.4.1.获取长度 & 访问元素 1.4.2.遍历数组 2.数组作为方法的参数 2.1.基本用法 2.2.内存 2.3.引用 2.4.初识 JVM 内存区域划分…

怎么做现货白银的心理障碍

克服投资的心理障碍&#xff0c;是怎么做现货白银投资的关键。很多时候&#xff0c;技术分析是很简单的。一根K线&#xff0c;一条均线&#xff0c;就能够让人获利。但是为什么使用同样工具的人&#xff0c;却不能获利呢&#xff1f;为什么他们还要去追求一些特别复杂的分析系统…

四平方和(蓝桥杯C/C++B组真题详解)(三种做法)

目录 题目详细&#xff1a;​编辑 题目思路&#xff1a; 暴力&#xff1a; 代码详解&#xff1a; 哈希&#xff1a; 二分&#xff1a; 题目详细&#xff1a; 题目思路&#xff1a; 这个题目大家可能马上就可以想到暴力做 例如这样 暴力&#xff1a; #include<iost…

TensorFlow和Keras应如何选择?

前些年&#xff0c;深度学习领域的研究人员、开发人员和工程师必须经常做出一些选择&#xff1a; 我应该选择易于使用但自定义困难的 Keras 库&#xff1f;还是应该使用难度更大的 TensorFlow API&#xff0c;编写大量代码&#xff1f;&#xff08;更不用说一个不那么容易使用…

pyspark之sparksql数据交互

在pyspark中&#xff0c;使用sparksql进行mysql数据的读写处理&#xff0c;将程序保存为test.py #-*- coding: UTF-8 -*- # 设置python的默认编码 import sys reload(sys) sys.setdefaultencoding(utf-8) # Spark 初始化 from pyspark.sql import SQLContext, SparkSession, …

【推荐】DDD领域驱动设计和中台实践资料合集

Domain Driven Design&#xff08;简称 DDD&#xff09;&#xff0c;又称为领域驱动设计&#xff0c;起源于杰出软件建模专家Eric Evans在2003年发表的书籍《DOMAIN-DRINEN DESIGN —TACKLING COMPLEXITY IN THE HEART OF SOFTWARE》&#xff08;中文译名《领域驱动设计—软件核…

卓海科技冲刺创业板:拟募资5.47亿 相宇阳控制52.9%股权

雷递网 雷建平 12月20日无锡卓海科技股份有限公司&#xff08;简称&#xff1a;“卓海科技”&#xff09;日前递交招股书&#xff0c;准备在深交所创业板上市。卓海科技计划募资5.47亿元&#xff0c;其中&#xff0c;1.04亿元用于半导体前道量检测设备扩产项目&#xff0c;1.84…

ev_api_server:大事件node接口项目开发

Headline 大事件后台 API 项目&#xff0c;API 接口文档请参考 https://www.showdoc.cc/escook?page_id3707158761215217 1. 初始化 1.1 创建项目 新建 api_server 文件夹作为项目根目录&#xff0c;并在项目根目录中运行如下的命令&#xff0c;初始化包管理配置文件&#x…

尚医通-前端Vue学习(十)

目录&#xff1a; &#xff08;1&#xff09;node.js介绍 &#xff08;2&#xff09;npm包管理工具 &#xff08;3&#xff09;es6模块化 &#xff08;4&#xff09;babel转码器 &#xff08;5&#xff09;webpack打包工具 &#xff08;1&#xff09;node.js介绍 浏览器的…

Python使用pandas导入xlsx格式的excel文件内容

Python使用pandas导入xlsx格式的excel文件内容1. 基本导入2. 列标题与数据对齐3. 指定导入某个sheet4. 指定行索引5. 指定列索引6. 指定导入列7. 指定导入的行数8. 更多的参数1. 基本导入 在 Python中使用pandas导入.xlsx文件的方法是read_excel()。 # codingutf-8 import pa…

Windows环境下在VScode中运行开源运动规划库(zhm-real / PathPlanning)的方法

本文主要介绍Windows环境下&#xff0c;在Vscode中运行zhm-real发布的开源运动规划库PathPlanning的实现方法&#xff0c;包括环境配置及运行开源包时常见错误解决方法。    一、环境配置 &#xff08;1&#xff09;VScode 下载及安装&#xff0c;官网如下&#xff1a; http…

Flowable工作流进阶使用教程(监听器+流程变量+网关)

一、任务分配和流程变量 1.任务分配 1.1 固定分配 固定分配就是我们前面介绍的&#xff0c;在绘制流程图或者直接在流程文件中通过Assignee来指定的方式 1.2 表达式分配 Flowable使用UEL进行表达式解析。UEL代表Unified Expression Language&#xff0c;是EE6规范的一部分…