二分图最大权匹配--KM算法模板

KM算法解决指派(匹配)问题的Java语言实现 KM算法是一个解决最大最小权匹配的经典算法。能解决的问题比如分配几个不同的工人完成不同的工作,求解怎样使得工厂的经济效益最高,建图就是每个工人完成每个工作对应的经济效益。还有一些建图比较复杂的问题,比如poj3686:有n个订单m个车间,每个车间均可以单独完成任何一个订单;每个车间完成不同订单的时间是不同的;不会出现两个车间完成同一个订单的情况;给出每个订单在某个车间完成所用的时间;求解订单完成的最 阅读详情

KM算法我是看了训练指南学会的,指出上面的一处错误,当时纠结了好久才发现,在349页情况二中第一个S应该是S‘。

模板代码如下:

import java.util.*;

public class Main {
	static int n,min;
	static int[] ss=new int[105];
	static int[] tt=new int[105];
	static int[] lx=new int[105];
	static int[] ly=new int[105];
	static int[] match=new int[105];
	static int[][] map=new int[105][105];
	static void km()
	{
		for(int i=1;i<=n;i++)
		{
			lx[i]=ly[i]=match[i]=0;
			for(int j=1;j<=n;j++)
				lx[i]=Math.max(lx[i],map[i][j]);
		}
		for(int i=1;i<=n;i++)
		{
			while(true)
			{
				Arrays.fill(ss,0);
				Arrays.fill(tt,0);
				min=1000000000;
				if(dfs(i)) break;
				for(int j=1;j<=n;j++)
				{
					if(ss[j]==1) lx[j]-=min;
					if(tt[j]==1) ly[j]+=min;
				}
			}
		}
	}
	static boolean dfs(int x)
	{
		ss[x]=1;
		for(int i=1;i<=n;i++)
		{
			if(tt[i]==1) continue;
			if(lx[x]+ly[i]!=map[x][i])
				min=Math.min(min,lx[x]+ly[i]-map[x][i]);
			else
			{
				tt[i]=1;
				if(match[i]==0||dfs(match[i]))
				{
					match[i]=x;break;
				}
			}
		}
		return false;
	}
}


模板 - KM算法(O(n^3))(二分图最大权完美匹配) 题目描述 给定一张二分图,左右部均有 n 个点,共有 m 条带权边,且保证有完美匹配。 求一种完美匹配的方案,使得最终匹配边的边权之和最大。 //Data const int N=500; int n,m,e[N+7][N+7]; //KM int mb[N+7],vb[N+7],ka[N+7],kb[N+7],p[N+7],c[N+7]; int qf,qb,q[N+7]; void Bfs(int u){ int a,v=0,vl=0,d; for(int i=1;i<=n;i 阅读详情

相关推荐

二分图最大权匹配 、 最小权匹配 模板

#include #include using namespace std; const int maxn=160,INF=2147483647; int w[maxn][maxn]; int lx[maxn],ly[maxn]; int linky[maxn]; int visx[maxn],visy[maxn]; int N; int slack[maxn]; void input() { scanf("%d",&N); for(int i=0;i

Rachel Zhang的专栏 5135

带权二分图的完备匹配算法(JAVA语言实现)

KM算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹 配的问题的。设顶点Xi的顶标为A[i],顶点Yi的顶标为B[i],顶点Xi与Yj之间的边权为w[ i,j]。在算法执行过程中的任一时刻,对于任一条边(i,j),A[i]+B[j]>=w[i,j]始终成立 。KM算法的正确性基于 以下定理: 若由二分图中所有满足A[i]+B[j]=w[i,j]的边(i,...

weixin_30478757的博客 416

MATLAB算法实战应用案例精讲-【数模应用】KM算法(最终篇)(附Java和C++代码实现)

(2)KM 算法的核心思想就是通过修改某些点的标号(但要满足点标始终是可行的),不断增加图中的可行边总数,直到图中存在仅由可行边组成的完全匹配为止,此时这个 匹配一定是最佳的(因为由可行点标的的定义,图中的任意一个完全匹配,其边权总和均不大于所有点的标号之和,而仅由可行边组成的完全匹配的边权总和等于所 有点的标号之和,故这个匹配是最佳的)。考虑修改目前在交错树中的边,如果将左边的点的顶标减去了,那么相应的,对于已经匹配上的边,右边的对应点的顶标要加上,这样原来的边的可行性才不会发生变化。

qq_36130719的博客 486

KM算法的实现和封装

        自己在写一个小程序时,遇到了一个类似于“完备匹配下的最大权匹配”的优化问题。在网上搜了下相关资料,了解到对应的匈牙利算法与KM算法,而且已经都有大神进行了详细讲解和代码的编写。唯一的不同之处是我参考的文章中KM算法目标是匹配结果最大为目标,而我的程序中是以匹配结果最小为目标。自己把代码改写了下,并封装为类。验证结果表明代码没有问题~        这里将代码放出,以供网友参考。不过...

On my way 1776

最大匹配算法Java原代码

最大匹配算法的Java源程序,结合了正向和反向的最大匹配,装了JDK就可以运行

用51单片机和LD3320语音模块DIY一个会说话的温度报警器(附完整代码)

本文详细介绍了如何使用51单片机和LD3320语音模块DIY一个智能温度报警器,包括硬件选型、电路设计、软件开发及核心功能实现。通过DS18B20温度传感器和语音模块的结合,实现温度超标时的语音报警功能,适合智能家居系统等应用场景。附完整代码,方便开发者快速复现。

weixin_42525632的博客 420

蓝桥杯 The Great Wall Game Java 二分图 KM算法

问题描述 小华和小沈发明了一个简单的棋盘游戏,他们称之为“长城游戏”。这个游戏需要一个n*n的网格和n颗石子。这些石子随机地放在网格的方格之中,一个格子中最多放一颗石子。每一次移动,可以将任意一颗石子移动到上下左右相邻的空方格之中。游戏的目标是用最少的移动步数,使得n颗石子构成“一堵墙”——排成一条水平、竖直或斜的直线。   现在的问题是,小华和小沈不知道对于一个给定的初始棋盘,达到目标需要移动的最小步数。他们想要你写一个程序能够实现对于任意一个给定的初始状态,求出将所有石子排成一条直线所需要的最小步数。

ELMA的博客 617

别再手动算LLC了!用Mathcad 15分钟搞定谐振参数与增益曲线(附已验证产品案例)

本文详细介绍了如何利用Mathcad在15分钟内高效完成LLC谐振变换器的参数计算与增益曲线绘制。通过对比传统工具,突出Mathcad在自然数学表达、实时单位换算和动态参数关联方面的独特优势,帮助电源工程师大幅提升设计效率。文章还提供了已验证的产品案例和实用模板,助力工程师快速掌握谐振参数优化技巧。

weixin_42548888的博客 548

hdu 2255 二分图最大权匹配 km算法模板

代码是打的kuangbin的模板 #include #include #include using namespace std; const int maxn= 305; const int inf= 0x3f3f3f3f; int g[maxn][maxn]; int nx,ny;//二分图两类点的个数 int linker[maxn],lx[maxn],ly[maxn]; i

写东西的地方 738

时空数据建模的跨节点联邦图神经网络:KDD21 Cross-Node Federated Graph Neural Network for Spatio-Temporal Data Modeling

前言 联邦学习(FL)虽然已经被广泛研究,但是对复杂的时空依赖关系进行建模以提高预测能力仍然是一个开放的问题。此外目前最优的时空预测模型假定对数据的访问不受限制,忽略了对数据共享的限制。基于此,本文提了一个基于图联邦学习的时空数据模型 Cross-Node Federated Graph Neural Network (CNFGNN),该模型在跨节点联邦学习的约束下,使用基于图神经网络(GNN)的架构对底层图结构进行编码,属于结构化联邦的一种,每个本地模型利用私有数据进行学习,并保持分散性。CNFGNN

qq_56027260的博客 1810

DDR内存条选购避坑指南:单Rank vs 双Rank性能实测对比(附2024年颗粒推荐)

本文深入解析了内存条中单Rank与双Rank设计的原理与性能差异。通过实战测试对比,揭示了双Rank内存在高负载场景(如3D渲染、视频剪辑)中凭借Rank Interleaving技术带来的显著性能优势,并提供了2024年针对不同用户需求的DDR4/DDR5内存选购策略与避坑指南。

ik678901的博客 1136

二分图最大权值匹配 KM算法 模板

KM算法详解+模板 大佬讲的太好了!!!太好了!!! 转载自:http://www.cnblogs.com/wenruo/p/5264235.html KM算法用来求二分图最大权完美匹配。 本文配合该博文服用更佳:趣写算法系列之--匈牙利算法 本文没有给出KM算法的原理,只是模拟了一遍算法的过程。另,博主水平较差,发现问题欢迎指出,谢谢!!!! 现在有N男N女,有些男生和...

Mod_13的博客 247

PCRNet: Point Cloud Registration Network using PointNet Encoding

PCRNet算是在ModelNet40这种object-centric数据集上用deep-learning做配准最好入手的一篇文章了,整体架构涉及简洁明了,一句话描述就是简单粗暴,话不多说,直接上网络架构图: Work Flow: 首先对输入source (N×3N \times 3N×3)与template (M×3M \times 3M×3)进行PointNet操作,即MLP + max-pooling后,分别得到描述各自点云的维度为1024的global feature vector:Φ(PS).

dloading7的博客 1648

KM算法详解+模板(二分图最大权值匹配)

转载自:http://www.cnblogs.com/wenruo/p/5264235.html KM算法用来求二分图最大权完美匹配。 本文配合该博文服用更佳:趣写算法系列之--匈牙利算法   本文没有给出KM算法的原理,只是模拟了一遍算法的过程。另,博主水平较差,发现问题欢迎指出,谢谢!!!!   现在有N男N女,有些男生和女生之间互相有好感,我们将其好感

shyoldman的博客 1万+

全志V3S嵌入式驱动开发(解决kernel 5.2.y wifi驱动问题)

​【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 wifi模块,之前测试的时候,开发板上用的是esp8089,当时内核时4.14.y,测试也是通过的。链接地址在这里, https://blog.youkuaiyun.com/feixiaoxing/article/details/131178420?spm=1001.2014.3001.5501 那个时候测试的时候,我们就说过,wifi驱动可能是除了镜像制作之外,最复杂的一个

嵌入式-老费,一个分享专业嵌入式知识的blog 1160

华为OD技术面八股文_C++_01

汇总华为OD技术面C++方向八股文真题,并提供详细解答。

qq_45776114的博客 1887

【二分图最大权匹配】【KM算法模板】

#include #include #include #include using namespace std; /* KM算法 * 复杂度O(nx*nx*ny) * 求最大权匹配 * 若求最小权匹配,可将权值取相反数,结果取相反数 * 点的编号从0开始 */ const int N = 310; const int INF = 0x3f3f3f3f; int n

ACM之路 430

【DaVinci Developer专题】-8-创建一个枚举Enum ADT(Application Data Type)

目录 1 创建一个枚举Value ADT(Application Data Type) 1.1 命名application data type 1.2 创建一个computation method计算方法属性 1.3 创建一个Contraint约束条件属性 2 创建了一个新的Type Mapping Sets 3 创建了一个S/R Port Interface 4 SWC引用Type Mapping set 5 导入CFG生成代码的总结 6 结尾 <--返回「实战篇」博文-总目录-

「汽车电子助手」的博客 2292

二分图最大权匹配【KM算法 BFS优化下的真正的O(N3)的KM算法】【KM算法模板】

很多人都知道的,要想真正知道你的KM算法是不是真实的,那么不妨用这道题来验证: UOJ #80. 二分图最大权匹配 如果你使用的是DFS,那么你的代码会TLE在第38组: #include <iostream> #include <cstdio> #include <cmath> #include <string> #include &l...

既然弱小,就只顾变强就是了 2090

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

二分图最大权匹配(KM算法)模板 HDU2255

讲解链接https://www.cnblogs.com/logosG/p/logos.html #include <bits/stdc++.h> using namespace std; #define INF 0x3f3f3f3f typedef long long ll; const int maxn = 100010; /* KM 算法 * 复杂度 O(nx*nx*ny)...

September_的博客 446

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

KM算法 求二分图最大权值的完美匹配 【模板 记录】

概念介绍 可行顶标:一个节点函数l,使得对任意弧都有lx[x] + ly[y] >= Map[x][y]。 相等子图:是原关系的生成子图G,包含所有点,但只包含满足lx[x] + ly[y] = Map[x][y]的弧。 匈牙利树:当前拥有匹配关系

世界很大 1279

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

二分图最大权匹配(完美匹配)——KM算法模板(dfs版O(n^4) + bfs版O(n^3))

写在前面: 考虑到二分图中两个集合中的点并不总是相同,为了能应用 KM算法解决二分图的最大权匹配,需要先作如下处理: 将两个集合中点数比较少的补点,使得两边点数相同,再将不存在的边权重设为 0,这种情况下,问题就转换成求最大权完美匹配问题 ,从而能应用KM算法求解。 具体算法流程: (1)分配可行顶标,对每个顶标执行(2)(3)(4) (2)匈牙利算法找到增广路 (3)找不到增广路就调整顶标。 (4)重复(2),(3)直到找到增广路 模板题:P6577 【模板】二分图最大权完美匹配 DFS版本: #incl

weixin_45925735的博客 1017

【模板】二分图最大权完美匹配KM算法

题目参见洛谷P4014模板贴一下。struct part { int ex[MAXN]; bool vis[MAXN]; } X, Y; int n, match[MAXN], slack[MAXN], fit[MAXN][MAXN]; bool DFS(int x) { X.vis[x] = true; for (int y = 1;y &lt;= n;y++) { ...

夕弦 589

P6577 【模板】二分图最大权完美匹配(KM算法)

传送门 题目描述 给定一张二分图,左右部均有 n个点,共有 m 条带权边,且保证有完美匹配。 求一种完美匹配的方案,使得最终匹配边的边权之和最大。 输入格式 第一行两个整数n, m,含义见题目描述。 第2~m+1行,每行三个整数gJ,c,h描述了图中的一条从左部的g 号结点到右部的c号节点,边权为h 的边。 输出格式 本题存在 Special Judge。 第一行一个整数 ans 表示答案。 第二行共n个整数a1, a2,a3·…an,其中a;表示完美匹配下与右部第i个点相匹配的左部点的编号。如果存在多种方

lcl1234567890lcl的博客 423

【luogu P6577】【模板】二分图最大权完美匹配(KM算法)

一个二分图,有一些带权边,保证有完美匹配。 求一种最大匹配的方案使得匹配边的边权和最大。

欢迎您的光顾awa 414
上一篇: GYM 100796C Minimax Tree
下一篇: POJ-1330 LCA的两种写法
AC_Machine
博客等级 码龄11年 1粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值