前置知识 :匈牙利算法

首先有这样一张图,求这张图的最大权完美匹配。

当然如果你不想看这些渣图的话,您可以转到 洛谷 运动员最佳匹配问题

下面我来强行解释一下KM算法

左边一群妹子找汉子,但是每个妹子都对汉字的好感度不一样,我们首先看一看每个妹子的最大好感度[期望值]是多少,同时先暂时把汉字的最大好感度[期望值]设为0

现在妹子的梦想能不能实现呢,我们来看一看

NO.1给A找汉子

这张图有一个明显的特性,就是每个妹子与让她有好感的汉子之间的边权总小于等于妹子的最大期待值。

凭着我初中数学考炸的经验,告诉你当取等的时候,你就没有辜负这个妹子的期望值

成了,不管有接下来有什么矛盾,我们去给B找汉子吧

NO.2给B找汉子

现在看起来没有什么矛盾,然后妹子C进来了

NO.3给C找妹子

貌似没有那么容易了,因为B已经和c在一起了

现在怎么办呢? 协商一下吧,C对B说:“(磨刀声)要不您换个口味吧 你我各退一步吧”

B:ook

但是汉子c看见BC这样吵架 心里顿时骄傲,于是自己的骄傲值加个1

那现在不就好办了吗。

所以这张图的最大权完美匹配就是11了

伪代码就好办了

void 匈牙利()
{
判断访问妹子
遍历她的汉子们
返回
} void km()
{
for(每个点) //根据定义,每个点都能求到最大权 完美 匹配 的
{
for(尝试n次||while ) //这两个一个意思
{
if(求到妹子汉子之间期望值之和等于边权→匈牙利算法 ) break;
刷新妹子的期望值;
刷新汉子的骄傲值;
//不要忘了 每次匈牙利算法清空 vis
}
}
}

所以上一段代码,题就是开头的 运动员最佳匹配问题

#include<iostream>
#include<cmath>
#include<queue>
#include<cstring>
#include<cstdio>
#include<queue>
#include<vector>
#include<algorithm> using namespace std; int n,m,love[][],lx[],ly[];
int vx[],vy[],bd[],tot,mmn; int dfs(int t)
{
if(vx[t])return ;
vx[t]=;
int i;
for(i=;i<=n;i++)
{
if(vy[i]) continue;
int p=lx[t]+ly[i]-love[t][i];
if(!p)
{
vy[i]=;
if(dfs(bd[i])||!bd[i])
{
bd[i]=t;
return ;
}
}
else if(p>)
mmn=min(mmn,p);
}
return ;
} void km()
{
int i,j;
for(i=;i<=n;i++)
{
while()
{
mmn=0x3f3f3f3f;
memset(vx,,sizeof(vx));
memset(vy,,sizeof(vy));
if(dfs(i)) break;
for(j=;j<=n;j++)
{
if(vx[j]) lx[j]-=mmn;
if(vy[j]) ly[j]+=mmn;
}
}
}
} int main()
{
scanf("%d",&n);
int i,j;
for(i=;i<=n;i++)
for(j=;j<=n;j++)
scanf("%d",&love[i][j]);
for(i=;i<=n;i++)
for(j=;j<=n;j++)
{
int t;
scanf("%d",&t);
love[j][i]*=t;
}
for(i=;i<=n;i++)
for(j=;j<=n;j++)
{
lx[i]=max(love[i][j],lx[i]);
}
km();
for(i=;i<=n;i++)
tot+=love[bd[i]][i];
printf("%d",tot);
return ;
}

二分图学习记 之 KM算法 二分图最大权完美匹配。的更多相关文章

  1. hdu1533 Going Home km算法解决最小权完美匹配

    Going Home Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  2. poj3565 Ants km算法求最小权完美匹配,浮点权值

    /** 题目:poj3565 Ants km算法求最小权完美匹配,浮点权值. 链接:http://poj.org/problem?id=3565 题意:给定n个白点的二维坐标,n个黑点的二维坐标. 求 ...

  3. HDU 3488 Tour (最大权完美匹配)【KM算法】

    <题目链接> 题目大意:给出n个点m条单向边边以及经过每条边的费用,让你求出走过一个哈密顿环(除起点外,每个点只能走一次)的最小费用.题目保证至少存在一个环满足条件. 解题分析: 因为要求 ...

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

    hdu2255模板题 KM是什么意思,详见百度百科. 总之知道它可以求二分图最大权完美匹配就可以了,时间复杂度为O(n^3). 给张图. 二分图有了边权,求最大匹配下的最大权值. 所以该怎么做呢?对啊 ...

  5. 【二分图最大权完美匹配】【KM算法】【转】

    [文章详解出处]https://www.cnblogs.com/wenruo/p/5264235.html KM算法是用来求二分图最大权完美匹配的.[也就算之前的匈牙利算法求二分最大匹配的变种??] ...

  6. 二分图最大权完美匹配KM算法

    KM算法二分图 KM求得二分图与普通二分图的不同之处在于:此二分图的每条边(男生女生)上都附了权值(好感度).然后,求怎样完美匹配使得权值之和最大. 这,不止一般的麻烦啊. 可以通过一个期望值来求. ...

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

    题目链接 https://www.luogu.com.cn/problem/P6577 题目大意 给定一个二分图,其左右点的个数各为 \(n\),带权边数为 \(m\),保证存在完美匹配. 求一种完美 ...

  8. Solution -「洛谷 P6577」「模板」二分图最大权完美匹配

    \(\mathcal{Description}\)   Link.   给定二分图 \(G=(V=X\cup Y,E)\),\(|X|=|Y|=n\),边 \((u,v)\in E\) 有权 \(w( ...

  9. hdu2255 奔小康赚大钱 km算法解决最优匹配(最大权完美匹配)

    /** 题目:hdu2255 奔小康赚大钱 km算法 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:lv 思路:最优匹配(最大权完美匹配) ...

随机推荐

  1. C#开发BIMFACE系列28 服务端API之获取模型数据13:获取三维视点或二维视图列表

    系列目录     [已更新最新开发文章,点击查看详细] 本篇主要介绍如何获取一个模型中包含的三维视点或二维视图列表. 请求地址:GET https://api.bimface.com/data/v2/ ...

  2. Java连载39-构造方法详解

    ​一. 1.多行注释:CTRL + shift + / 2.当一个类中没有定义任何构造方法的话,系统默认给该类提供一个无参数的构造方法,这个构造方法被称为缺省构造器. public class D39 ...

  3. java获取下一天的日期

    我们来看看Java怎么获取下一天的日期: 哈哈哈,开玩笑啦,这个只是个段子. "哪怕悲伤有1000种,快乐有1种就够了."

  4. oracle11g安装教程

  5. 为什么要做外链建设?seo优化与发布外链速度有哪些联系?

    对于SEO员工来说,我们每天都在处理网页.从内容创建的角度来看,我们每天创建大量的URL并进入索引状态.与网站的受欢迎程度相比,网站每天也会生成大量的外部链接. 实际上,相对于链接而言,它满足了搜索引 ...

  6. PlayJava Day008

    今日所学: /* 2019.08.19开始学习,此为补档. */ 1.包装类:对基本数据类型进行封装,使其具有属性和方法. Integer s1 = new Integer(123) ; Intege ...

  7. Java生鲜电商平台-API请求性能调优与性能监控

    Java生鲜电商平台-API请求性能调优与性能监控 背景 在做性能分析时,API的执行时间是一个显著的指标,这里使用SpringBoot AOP的方式,通过对接口添加简单注解的方式来打印API的执行时 ...

  8. java主函数

    相信很多初次接触java的同学,在遇见主函数的时候,听到最多的就是主函数的格式是固定的,不能进行修改等等.这就让人疑惑了,主函数为啥就那么特殊呢?接下来博主会为大家解释主函数.大家先看看下面这个程序: ...

  9. 苹果 iOS13.2.2 正式版修复闷杀后台问题了?别担心,PerfDog 帮你来检测!

    导语 苹果于上周推送了iOS 13.2版本,带来了用户备受期待的图像处理系统深度融合(Deep Fusion),新增70多个表情.HomeKit安全视频.Siri隐私设置和支持AirPods Pro等 ...

  10. Fiddler使用技巧:强大的数据文本编解码功能

    - 总览 打开Fiddler后,使用快捷键Ctrl+e或者点击菜单Tools-->TextWizard...即可进入TextWizard界面. 界面上方为输入框,用来输入需要编码或解码的数据. ...