算法题 匈牙利算法 求二分图最大匹配(Python)
题目:
给定一个二分图,其中左半部包含n1n1个点(编号1~n1n1),右半部包含n2n2个点(编号1~n2n2),二分图共包含m条边。
数据保证任意一条边的两个端点都不可能在同一部分中。
请你求出二分图的最大匹配数。
二分图的匹配:给定一个二分图G,在G的一个子图M中,M的边集{E}中的任意两条边都不依附于同一个顶点,则称M是一个匹配。
二分图的最大匹配:所有匹配中包含边数最多的一组匹配被称为二分图的最大匹配,其边数即为最大匹配数。
输入格式
第一行包含三个整数 n1n1、 n2n2 和 mm。
接下来m行,每行包含两个整数u和v,表示左半部点集中的点u和右半部点集中的点v之间存在一条边。
输出格式
输出一个整数,表示二分图的最大匹配数。
数据范围
1≤n1,n2≤500
1≤u≤n1,
1≤v≤n2
1≤m≤10^5
输入样例:
2 2 4
1 1
1 2
2 1
2 2
输出样例:
2
代码:
n1, n2, m = map(int, input().split())
idx = 0
e, ne, h = [0]*(2*m+1), [0]*(2*m+1), [-1]*(n1+1)match = [0]*(n2+1)def add(a, b):global idxe[idx], ne[idx], h[a] = b, h[a], idxidx += 1def find(x):i = h[x]while i != -1:j = e[i]if not st[j]:st[j] = Trueif match[j] == 0 or find(match[j]):match[j] = xreturn Truei = ne[i]return Falsefor _ in range(m):a, b = map(int, input().split())add(a, b)res = 0
for i in range(1, n1+1):st = [False]*(n2+1)if find(i): res += 1
print(res)
算法题 匈牙利算法 求二分图最大匹配(Python)相关推荐
- 匈牙利算法 求二分图最大匹配
匈牙利算法 1. 二分图 二分图: 又称作二部图,是图论中一种特殊模型.设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中每条边所关联的两个顶点 i 和 j 分别属 ...
- edmonds算法matlab,匈牙利算法的matlab实现
匈牙利算法 算法简介 算法原理 算法实现(附代码) 测试 算法简介 下面摘用百度百科中的解释. 匈牙利算法(Hungarian method)是由匈牙利数学家Edmonds于1965年提出,因而得名. ...
- 趣写算法之匈牙利算法
[书本上的算法往往讲得非常复杂,我和我的朋友计划用一些简单通俗的例子来描述算法的流程] 匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思 ...
- 51nod 2006 飞行员配对(二分图最大匹配) 裸匈牙利算法 求二分图最大匹配题
题目: 题目已经说了是最大二分匹配题, 查了一下最大二分匹配题有两种解法, 匈牙利算法和网络流. 看了一下觉得匈牙利算法更好理解, 然后我照着小红书模板打了一遍就过了. 匈牙利算法:先试着把没用过的左 ...
- HDU - 2389 Rain on your Parade(Hopcroft-Krap算法求二分图最大匹配)
题目链接:点击查看 题目大意:给出n个人和m个雨伞,t分钟后就要下雨了,现在给出每个人的坐标和速度,以及雨伞所在的坐标,每个雨伞只能容纳一个人,题目问最多有多少个人能不被淋到 题目分析:二分图最大匹配 ...
- 【网络流24题】解题报告:A、飞行员配对方案问题(最大流求二分图最大匹配)
A.飞行员配对方案问题 (二分图最大匹配)(最大流)[提高+/省选- ] 题目链接 [问题分析] 二分图最大匹配问题. [建模方法] 在二分图的基础上增加源S和汇T. 1.S向X集合中每个顶点连一条容 ...
- Java构造字符串算法题_LeetCode算法题-Repeated Substring Pattern(Java实现)
这是悦乐书的第236次更新,第249篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第103题(顺位题号是459).给定非空字符串检查是否可以通过获取它的子字符串并将子字符 ...
- LeetCode算法题2:求字符串b在字符串a中的起始下标
文章目录 前言 一.题目描述 二.思路 1.朴素匹配 1.1Java直接实现 2.kmp模式匹配 总结 前言 本系列文章为leetCode刷题笔记,仅供参考. 一.题目描述 若字符串 a 包含字符串 ...
- python比赛积分类算法题_Python算法题(一)——青蛙跳台阶
题目一(青蛙跳台阶): 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 分析: 假设只有一级台阶,则总共只有一种跳法: 假设有两级台阶,则总共有两种跳法: ...
最新文章
- 查看MS SQL Server数据库每个表占用的空间大小
- MySQL8索引篇:性能提升了100%!!
- 【例3.5】位数问题
- k8s StatefulSet
- SpringMVC介绍之Validation
- iOS15字符串格式化缺0补0的写法
- Hibernate基本概念 (4)
- 如何循环遍历document.querySelectorAll()方法返回的结果
- Python 生成requirement 使用requirements.txt
- large_margin
- GCD三部曲之一---辗转相除法
- webConfig详细跳转配置.[转]
- 2018-12-13丛晓强作业
- 简单的使用git克隆上传创建下载删除
- 详解BI系统中的任务调度
- 认知盈余时代-知乎如何运营
- roc_curve()的用法及用途
- Openbravo安装与部署
- 论文笔记|Unsupervised Keyphrase Extraction by Jointly Modeling Local and Global Context
- System.Net.WebException: 基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系。 ---> System.Security.Authentication.Authe