前置知识 :匈牙利算法

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

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

下面我来强行解释一下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. electron窗口间通信

    以下代码均来自于我开发的开源软件:想学吗 窗口A的渲染进程发消息给主进程 const { clipboard, ipcRenderer, remote } = require('electron'); ...

  2. Qt Designer布局预览正常,代码调用时所有控件堆在一起

    一.实验环境 1.Windows10x64 2.anaconda4.6.9 + python3.7.1(anaconda集成,不需单独安装) 3.pyinstaller3.5 二.问题描述 1.Qt ...

  3. 使用Kafka建立可靠的高性能分布式消息传递基础结构

    在优锐课学习中了解到,我们可以看到实施资源适配器以将Kafka与企业Java解决方案集成.码了很多专业的相关知识, 分享给大家参考学习. 由于世界已经变得移动化,因此应用程序现在必须实时提供数据. 不 ...

  4. 开源的13个Spring Boot 优秀学习项目!超53K星,一网打尽!

    Spring Boot 算是目前 Java 领域最火的技术栈了,也是Java开发人员不得不掌握的技术,今天给大家整理了13个优质 Spring Boot 开源项目给大家参考,希望能够帮助到正在学习 S ...

  5. pytest框架之rerunfailures失败重运行机制

    web自动化测试中,稳定性在整个测试运行中都至关重要,但不能保证测试脚本或者测试环境一直都能够稳定,它牵扯到诸多因素,在这里就不赘述,pytest框架相较于unittest的一大优势就在于拥有用例失败 ...

  6. oracle里面查询重复数据的方法

    一张person表,有id和name的两个字段,id是唯一的不允许重复,id相同则认为是重复的记录. select id from group by id having count(*) > 1 ...

  7. Zabbix 数据清理

    目录 Zabbix 数据清理的一系列操作 一.问题 二.解决办法 Zabbix 数据清理的一系列操作 基本信息: Zabbix 版本 4.0.9 MySQL 版本 5.5 一.问题 我们将 Zabbi ...

  8. Python 使用 PyMysql、DBUtils 创建连接池,提升性能

    转自:https://blog.csdn.net/weixin_41287692/article/details/83413775 Python 编程中可以使用 PyMysql 进行数据库的连接及诸如 ...

  9. Python 最强 IDE 详细使用指南!-PyCharm

    PyCharm 是一种 Python IDE,可以帮助程序员节约时间,提高生产效率.那么具体如何使用呢?本文从 PyCharm 安装到插件.外部工具.专业版功能等进行了一一介绍,希望能够帮助到大家. ...

  10. 易优CMS:关于assign你知道多少

    [基础用法] 名称:assign 功能:模板文件中定义变量,可在其他标签里使用该变量 语法: {eyou:assign name='typeid' value='5' /} 文件: 无 参数: nam ...