首页 > 编程语言 >匈牙利算法

匈牙利算法

时间:2023-01-25 10:44:06浏览次数:58  
标签:匹配 记录 int 匈牙利 后来者 bian 算法

匈牙利算法

基础例题:【模板】二分图最大匹配

题目描述
给定一个二分图,其左部点的个数为 n,右部点的个数为 m,边数为 e,求其最大匹配的边数。
左部点从 1 至 n 编号,右部点从 1 至 m 编号。

不多bb,直接上代码

算法主要步骤:

  1. 从第一位开始找(先到先得)
  2. 后来者如果想匹配的对象已经被别人匹配走了,如那位先匹配者有其它匹配选择,就让给后来者,没有就让他爬
  3. 如果后来者真的啥也匹配不到了,那就爬

整个过程可用递归实现

总代码

#include<bits/stdc++.h>
using namespace std;
int n,m,e,match[501],ans;//match用来记录与被匹配者匹配的人是否还有其它选择
vector<int> bian[50010];//记录可选匹配对象
bool vis[501];//记录匹配对象是否已经被匹配
bool dfs(int u){
	for(int i=0;i<bian[u].size();i++){
		int v=bian[u][i];
		if(vis[v])continue;//倘若之前已经找过她了,那放弃吧
		vis[v]=1;
		if(match[v]==0||dfs(match[v])){//倘若没被匹配过,或者其匹配者有其它选择,那就让他匹配其它选择,新来的匹配旧选择
			match[v]=u;
			return 1;//匹配到了
		}
	}
	return 0;
}
int main(){
	cin>>n>>m>>e;
	for(int i=1;i<=e;i++){
		int u,v;
		cin>>u>>v;
		bian[u].push_back(v);//记录匹配选择
	}
	for(int i=1;i<=n;i++){
		memset(vis,0,sizeof(vis));//记得清空vis
		if(dfs(i))ans++;//匹配到了就ans++
	}
	cout<<ans;
	return 0;
}

其实,说来说去,就是一个绿与被绿,选择备胎的过程(6666666)

标签:匹配,记录,int,匈牙利,后来者,bian,算法
From: https://www.cnblogs.com/alwayslove/p/17066736.html

相关文章

  • 第一章 基础算法
    目录1快速排序算法1.2第k个数2归并排序算法2.2逆序对数量3二分3.1数的范围3.2数的三次方根4高精度算法4.1加法4.2减法4.3乘法4.4除法5前缀和与差分5.1一维......
  • 人工智能算法进阶:SOM聚类的应用
    OM即自组织映射,是一种用于特征检测的无监督学习神经网络。它模拟人脑中处于不同区域的神经细胞分工不同的特点,即不同区域具有不同的响应特征,而且这一过程是自动完成的。SO......
  • Manacher算法
    文章默认给定字符串中只会出现小写英文字母介绍通过已经学习了的字符串哈希,我们可以用\(O(n\logn)\)的时间复杂度求解一个串中的最长回文子串了,那么我们思考一下是......
  • 2023牛客寒假算法基础集训营3 A-I+K
    A题解知识点:贪心。把所有正偶数除成奇数,即可。(人傻了没加\(x>0\)WA2时间复杂度\(O(n)\)空间复杂度\(O(1)\)代码#include<bits/stdc++.h>usingll=longlon......
  • Matlab复现RRT算法
    快速搜索随机树(Rapid-explorationRandomTree,RRT)算法是一种在完全己知的环境中通过随机采样扩展搜索的算法特点:RRT算法是概率完备的,如果规划时间足够长,如果确实存在一......
  • 梅森旋转算法
    梅森旋转算法(Mersennetwister)是一个伪随机数发生算法。由松本真和西村拓士在1997年开发,基于有限二进制字段上的矩阵线性递归。可以快速产生高质量的伪随机数,修正了古典随......
  • 机器学习算法-有监督学习的定义与模型
    有监督学习的定义与模型 机器学习的算法可以分为以下三类:有监督学习(SupervisedLearning):有预测目标Y,通过X预测Y无监督学习(UnsupervisedLearning):没有Y,只通过X......
  • 使用栅格地图复现Floyd算法
    Floyd算法适用于APSP(AllPairsShortestPaths,多源最短路径),是一种动态规划算法,稠密图效果最佳,边权可正可负。此算法简单有效,由于三重循环结构紧凑,对于稠密图,效率要高于Di......
  • 使用栅格地图复现迪杰斯特拉算法
    Dijkstra算法可以计算出在有权图中从某个起点出发到其他任何一点的最短路径长度算法思想:迪杰斯特拉算法主要特点是从起始点开始,采用贪心算法的策略,每次遍历到始点距离最......
  • 2023牛客寒假算法基础集训营1 个人题解(ACDHKL)
    A.WorldFinal?WorldCup!(I)题意:给10场比赛的点球输赢情况,奇数为A队点球,偶数为B队点球思路:用两个变量x,y来分别存A队当前赢的场次和B队当前赢的场次然后就就扫......