AcWing861 二分图的最大匹配 匈牙利算法
就是说是怎么才能让尽可能多的人找到对象法((
给定一个二分图,其中左半部包含 n1 个点(编号 1∼n1),右半部包含 n2 个点(编号 1∼n2),二分图共包含 m 条边。
数据保证任意一条边的两个端点都不可能在同一部分中。
请你求出二分图的最大匹配数。
二分图的匹配:给定一个二分图 G,在 G 的一个子图 M 中,M 的边集 {E} 中的任意两条边都不依附于同一个顶点,则称 M 是一个匹配。
二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。
输入格式
第一行包含三个整数 n1、 n2 和 m。
接下来 m 行,每行包含两个整数 u 和 v,表示左半部点集中的点 u 和右半部点集中的点 v 之间存在一条边。
输出格式
输出一个整数,表示二分图的最大匹配数。
数据范围
1≤n1,n2≤500,
1≤u≤n1,
1≤v≤n2,
1≤m≤1e5
输入样例:
2 2 4
1 1
1 2
2 1
2 2
输出样例:
2
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 510, M = 100010;
int n1, n2, m;
int h[N], e[M], ne[M], idx;
int match[N];//存储当前匹配的对象
bool st[N];void add(int a, int b) {e[idx] = b;ne[idx] = h[a];h[a] = idx++;
}bool 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;
}
int main() {memset(h, -1, sizeof h);cin >> n1 >> n2 >> m;while (m--) {int a, b;cin >> a >> b;add(a, b);}int res = 0;for (int i = 1; i <= n1; i++) {memset(st, false, sizeof st);//把每个右边匹配对象重置 //因为对上一个点不匹配的点不一定对下一个点不匹配//就是有喜欢的对象就先表个白 成不成find说了算if (find(i))res++;}cout << res;return 0;
}
AcWing861 二分图的最大匹配 匈牙利算法相关推荐
- 二分图的最大匹配—匈牙利算法
[基本概念]: 二分图: 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分 ...
- 二分图的最大匹配 匈牙利算法
基本概念 1.二分图: 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别 ...
- 二分图最大匹配 - 匈牙利算法
问题描述: X集合(编号1~m),Y集合(编号m+1~n).n,m<100. 给出若干组合(x, y)(相当于映射x->y),问最都能同时有几个组合(分配). 分析: 题目可能简化描述得不 ...
- 二分图最大匹配—匈牙利算法
二分图:又叫二部图,图G中顶点集V可以分成互不相交的子集(X,Y),并且图中的每一条边所关联的点分别属于两个不同的顶点集,则图G叫二分图.(不含奇环) 二分图的匹配:给定一个二分图G的子图M,M的边集 ...
- 二分图最大匹配-匈牙利算法
今天介绍 匈牙利算法 : 匈牙利算法,是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,由匈牙利数学家Edmonds于1965年提出,因而得名. 先介绍一下 ...
- 二分图的匹配——匈牙利算法
什么是匹配 匹配:在图论中,一个「匹配」是一个边的集合,其中任意两条边都没有公共顶点. 最大匹配:一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配. 二分图的匹配:给定一个二分图G,在G ...
- 数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配
数据结构与算法学习笔记15:最大流问题 / 二分图 / 有权无权二分图的匹配 / 匈牙利算法 / 银行家算法 / 稳定婚配 引入小题:最短路径 最大流问题(maximum flow problem) ...
- HDU 2063 过山车 (二分图匹配之匈牙利算法)
过山车 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- 二分图最大匹配——匈牙利算法
二分图最大匹配 (一).二分图的介绍 1.定义 2.充要条件 (二).二分图的匹配 1.二分图的最大匹配 2.增广路径 3.匈牙利算法 (1).复杂度 (2).算法思路 (3).代码实现 (一).二分 ...
最新文章
- 检查Android应用程序是否在后台运行
- 【网络安全】Agent内存马的自动分析与查杀
- java 连接redis 以及基本操作
- Android 系统(175)---Android硬件加速原理与实现简介
- 马斯克称面临巨大通胀压力 暗示特斯拉可能涨价
- BZOJ1051|HAOI2006受欢迎的牛|强连通分量
- 走进龙芯3A3000(一)安装Loongnix
- Java SE基础知识点总结(四)
- 无法直接复制文件到ubuntu虚拟机解决
- oracle公司的crm系统,原创-CRM客户关系管理系统设计-jsp+oracle
- 北漂IT男返乡2年的三线楼市观察(宜昌夷陵篇)-原创
- win8计算机显示在桌面快捷方式,win10、win8.1系统桌面快捷方式图标显示异常怎么办-系统操作与应用
-亦是美网络...
- 怀孕计算机在线,【孕期天数计算器在线计算_孕期天数计算器在线计算专题】- 天鹅到家...
- 计算机硬件的组装硬盘,组装电脑如何选择硬盘?DIY装机四种电脑硬盘搭配方案提供参考...
- Python学习笔记 day9 堡垒机前戏之paramiko模块
- 嵌入式行业是个坑吗?
- MAFIA 算法解析
- 真心话大冒险经典问题
- QSL语句大全(3)
- Mac登录不上自己的QQ账号,别人的账号却是可以正常登录--解决方法