861. 二分图的最大匹配

给定一个二分图,其中左半部包含 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≤105

输入样例:

2 2 4
1 1
1 2
2 1
2 2

输出样例:

2

代码:

#include <bits/stdc++.h>
using namespace std;const int N = 510, M = 1e5 + 10;int n1, n2, m;
int h[N], e[M], ne[M], idx;
// match[j]=a,表示女孩j的现有配对男友是a
int match[N];
// st[]数组我称为临时预定数组,st[j]=a表示一轮模拟匹配中,女孩j被男孩a预定了。
bool st[N];int res;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;//如果女孩j没有男朋友,或者她原来的男朋友能够预定其它喜欢的女孩。配对成功if (match[j] == 0 || find(match[j])){match[j] = x;return true;}}}return false;
}int main()
{cin >> n1 >> n2 >> m;memset(h, -1, sizeof h);while (m--){//存边只存一边就行了,虽然是无向图。int a, b;cin >> a >> b;add(a, b);}for (int i = 1; i <= n1; i++){//因为每次模拟匹配的预定情况都是不一样的所以每轮模拟都要初始化memset(st, false, sizeof st);// 当前的i必定是没有对象的if (find(i))res++;}cout << res << endl;return 0;
}

861. 二分图的最大匹配相关推荐

  1. 匈牙利算法 -- Acwing 861. 二分图的最大匹配

    Acwing 861. 二分图的最大匹配 题目描述 给定一个二分图,其中左半部包含 n1 个点(编号 1∼n1),右半部包含 n2 个点(编号 1∼n2),二分图共包含 m条边. 数据保证任意一条边的 ...

  2. AcWing 861 二分图的最大匹配

    题目描述: 给定一个二分图,其中左半部包含n1个点(编号1~n1),右半部包含n2个点(编号1~n2),二分图共包含m条边. 数据保证任意一条边的两个端点都不可能在同一部分中. 请你求出二分图的最大匹 ...

  3. AcWing 861. 二分图的最大匹配(Java)_匈牙利算法

    二分图的最大匹配 ①. 题目 ②. 思路 ③. 学习点 ④. 代码实现 原题链接 ①. 题目 ②. 思路 匹配:在图论中,一个「匹配」是一个边的集合,其中任意两条边都没有公共顶点. 最大匹配:一个图所 ...

  4. AcWing 861. 二分图的最大匹配

    AcWing 题目链接 匈牙利算法模板题 最大匹配:边数最多的匹配 完美匹配:所有顶点都匹配上了.完美匹配一定是最大匹配. 时间复杂度O(mn)O(mn)O(mn),实际运行效率远小于这个值. #in ...

  5. 168输出为861java_AcWing 861. 二分图的最大匹配-java-关键处注释

    import java.io.*; import java.util.Arrays; class Main { static int n1, n2, m; //邻接表形式存放左边到右边的边 stati ...

  6. AcWing 861. 二分图的最大匹配(匈牙利算法)

    题目连接 https://www.acwing.com/problem/content/863/ 思路 我们选择左半边或者右半边作为枚举点,然后对于当前的位置做一次判断如果当前位置的第一条边的女生已经 ...

  7. 用匈牙利算法求二分图的最大匹配

    转载大神的!! 什么是二分图,什么是二分图的最大匹配,这些定义我就不讲了,网上随便都找得到.二分图的最大匹配有两种求法,第一种是最大流(我在此假设读者已有网络流的知识):第二种就是我现在要讲的匈牙利算 ...

  8. CF 277.5 B.BerSU Ball 二分图的最大匹配 模版题

    题意:求二分图的最大匹配数量 模版如下: //二分图匹配(匈牙利算法的DFS实现) //初始化:g[][]两边顶点的划分情况 //建立g[i][j]表示i->j的有向边就可以了,是左边向右边的匹 ...

  9. 二分图的最大匹配 匈牙利算法

    基本概念 1.二分图: 二分图又称作二部图,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别 ...

最新文章

  1. 4个月原生weex混合开发终结()
  2. KS007基于JSP实现人个人博客系统
  3. 面试官:你说一下Redis使用场景都有哪些
  4. 数学之美 系列十六 (下)- 不要把所有的鸡蛋放在一个篮子里 最大熵模型...
  5. eclipse打开出错 Error: opening registry key 'Software\JavaSoft\Java Runtime Environment'
  6. ADO.NET Entity Framework 深入分析, Part 5
  7. ASP.NET学习笔记 2
  8. 借助实时数据推送快速制作在线对战五子棋小游戏丨实战
  9. Cisco无线AP的配置
  10. 基本农田卫星地图查询_#重庆朝天门#谷歌百度腾讯高德“卫星地图”PK,谷歌更胜一筹...
  11. c#统计字符串中数字字符的个数【C#】
  12. ios 原生android系统下载地址,Android/iOS已有原生项目集成ReactNative
  13. 判断用户是否开启定位功能 / 判断用户是否为应用程序开启定位功能
  14. 这些年,我们无法忘却的jQuery日历插件
  15. 中级软件工程师资格证_软件工程师资格等级:初级,中级和高级
  16. [bzoj3812]主旋律
  17. 第一次养狗_如何度过艰难的第一个月
  18. 搜狗站长平台没有sitemap的接口无法提交sitemap?该怎么提交?【已解决】
  19. neo4j 初始密码
  20. 前端剑法第一式———砺锋

热门文章

  1. gmp计算机软件系统分类原则,新版GMP对自动化设备、计算机系统软件的验证要求...
  2. 目标检测和图像分割常用的标注工具
  3. word排版技巧:如何让选择题多个选项快速对齐
  4. 一个 GitHub 项目搞定微信登录
  5. 中国民航飞行学院人事薪资管理系统实践案例 1
  6. STM32 cudeIDE使用J-link下载程序
  7. 工业废水的种类及其处理工艺简析
  8. oracle自定义函数身份证15位和18位的转换
  9. 补单平台-淘宝天猫补单平台-手工补单平台-靠谱的补单平台是什么样的
  10. TeamViewer11的安全设置