本文讲述的是匈牙利算法,即图论中寻找最大匹配的算法,暂不考虑加权的最大匹配(用KM算法实现),文章整体结构如下: 基础概念介绍 算法的实现 好的,开始! 一. 部分基础概念的介绍 我会严格介绍其定义,并同时用自己的大白话来重述。 概念点1. 图G的一个匹配是由一组没有公共端点的不是圈的边构成的集合。 ...
分类:
编程语言 时间:
2020-09-17 13:17:00
阅读次数:
30
二分图最大匹配: 匈牙利算法 邻接表O(mn): #pragma GCC optimize(2) #include <bits/stdc++.h> using namespace std; const int maxn = 1010; const int maxm = 2e5; int n, m, ...
分类:
其他好文 时间:
2020-07-14 21:42:51
阅读次数:
67
网络流 km算法 什么是网络流? 网络流指,存在一个源点s和一个汇点t的特殊有向无环图(TAG),虽然说有图会好很多但是毕竟我只是写着为了之后忘了有回顾的东西,而且好麻烦.. 那什么是网络流的最大流? 网络流的最大流是指这个网络流允许通过的最大流(有点重复定义的感觉,不过定义好像也是望文生义) 网络 ...
分类:
编程语言 时间:
2020-06-30 00:58:30
阅读次数:
99
二分图(可以带权)中的最大匹配问题,一般图要用带花树 (不会qaq 一些定义 一些定义和性质可能在算法讲解中用不到,但是下面的题目中会用到 二分图:能将原图点集 \(V\) 分成两个集合 \(A,B\),且 \(A\cap B=\emptyset,A\cup B=V\),使得所有边的端点一个在 \( ...
分类:
编程语言 时间:
2020-05-29 21:41:17
阅读次数:
94
Golden Tiger Claw (KM算法) Describe Omi, Raymondo, Clay and Kimiko are on new adventure in search of new Shen Gong Wu. But Evil Boy Genius Jack Spicer i ...
分类:
编程语言 时间:
2020-05-11 18:32:58
阅读次数:
58
题意:给你一个n*n的矩阵,让你给矩阵的每一行每一列附一个值,使得每一个矩阵中的点的行和列的值的和大于等于该点的权值,并使得行列值之和最小。 思路:其实这道题我们就是跑一遍KM算法就行了,因为在KM过程中我们始终有两点之间的期望值之和大于等于两点之间的距离,我们就可以把期望值当做行列的值就行了,最终 ...
分类:
其他好文 时间:
2020-05-11 18:30:37
阅读次数:
58
题目连接:https://www.luogu.com.cn/problem/UVA11383 下面是题解: 我们仔细一想就会发现这道题其实是一个二分图最大匹配的板子 我们可以把这道题想象成将男生和女生之间两两配对,使他们的好感度最大 我们把矩阵中的元素a[x][y] 看成女生和男生之间的好感度,跑一 ...
分类:
编程语言 时间:
2020-05-11 18:24:33
阅读次数:
63
题意:给一个n行n列的矩阵,构造两个数组a,b,使得对于任意x,y≤n满足mapp[x][y]≤a[x]+b[y] 分析:这不就是个KM算法的板子题吗? (摘自老姚博客) 所以只需要输出A数组B数组与ans即可(真没啥好说的,我称之为KM算法附赠品) 代码: #include<cstdio> #in ...
分类:
其他好文 时间:
2020-05-11 00:57:04
阅读次数:
46
题目 题解 其实就是一个KM的板子 KM算法在进行中, 需要满足两个点的顶标值之和大于等于两点之间的边权, 所以进行一次KM即可. KM之后, 顶标之和就是最小的。因为如果不是最小的,就能通过修改顶标值来使某对顶点的顶标值满足$wx[i]+ly[j]==w[i][j]$,这样相等子图中又会多一条边, ...
分类:
其他好文 时间:
2020-05-10 22:47:03
阅读次数:
58
分析 这个题即使看不懂看题目的要求应该也知道是KM算法吧。。。 emm,首先说为什么是Km算法,因为要求每个行和每个列的和最小对吧,就可以给它们一个项标,KM算法的时候项标初始化都是最大的,而根据算法的不断进行,项标之和只会缩小而不会增大,所以最后匹配完成,所有行和列的项标和最小。 然后详细说一下K ...
分类:
其他好文 时间:
2020-05-10 18:54:20
阅读次数:
54