二分图学习记 之 KM算法 二分图最大权完美匹配。
前置知识 :匈牙利算法
首先有这样一张图,求这张图的最大权完美匹配。
当然如果你不想看这些渣图的话,您可以转到 洛谷 运动员最佳匹配问题
下面我来强行解释一下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算法 二分图最大权完美匹配。的更多相关文章
- hdu1533 Going Home km算法解决最小权完美匹配
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- poj3565 Ants km算法求最小权完美匹配,浮点权值
/** 题目:poj3565 Ants km算法求最小权完美匹配,浮点权值. 链接:http://poj.org/problem?id=3565 题意:给定n个白点的二维坐标,n个黑点的二维坐标. 求 ...
- HDU 3488 Tour (最大权完美匹配)【KM算法】
<题目链接> 题目大意:给出n个点m条单向边边以及经过每条边的费用,让你求出走过一个哈密顿环(除起点外,每个点只能走一次)的最小费用.题目保证至少存在一个环满足条件. 解题分析: 因为要求 ...
- 【模板】二分图最大权完美匹配KM算法
hdu2255模板题 KM是什么意思,详见百度百科. 总之知道它可以求二分图最大权完美匹配就可以了,时间复杂度为O(n^3). 给张图. 二分图有了边权,求最大匹配下的最大权值. 所以该怎么做呢?对啊 ...
- 【二分图最大权完美匹配】【KM算法】【转】
[文章详解出处]https://www.cnblogs.com/wenruo/p/5264235.html KM算法是用来求二分图最大权完美匹配的.[也就算之前的匈牙利算法求二分最大匹配的变种??] ...
- 二分图最大权完美匹配KM算法
KM算法二分图 KM求得二分图与普通二分图的不同之处在于:此二分图的每条边(男生女生)上都附了权值(好感度).然后,求怎样完美匹配使得权值之和最大. 这,不止一般的麻烦啊. 可以通过一个期望值来求. ...
- 【模板】二分图最大权完美匹配(KM算法)/洛谷P6577
题目链接 https://www.luogu.com.cn/problem/P6577 题目大意 给定一个二分图,其左右点的个数各为 \(n\),带权边数为 \(m\),保证存在完美匹配. 求一种完美 ...
- Solution -「洛谷 P6577」「模板」二分图最大权完美匹配
\(\mathcal{Description}\) Link. 给定二分图 \(G=(V=X\cup Y,E)\),\(|X|=|Y|=n\),边 \((u,v)\in E\) 有权 \(w( ...
- hdu2255 奔小康赚大钱 km算法解决最优匹配(最大权完美匹配)
/** 题目:hdu2255 奔小康赚大钱 km算法 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:lv 思路:最优匹配(最大权完美匹配) ...
随机推荐
- Spring案例--打印机
目录: 1.applicationContext.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> &l ...
- 惊!Python能够检测动态的物体颜色!
本篇文章将通过图片对比的方法检查视频中的动态物体,并将其中会动的物体定位用cv2矩形框圈出来.本次项目可用于树莓派或者单片机追踪做一些思路参考.寻找动态物体也可以用来监控是否有人进入房间等等场所的监控 ...
- pandas.read_sql_query()读取数据库数据用chunksize的坑
最近一项工作需要读取数据库中1500万条数据,考虑到数据量太大,不方便直接一次性读取,不然会内存爆炸.想到用pandas.read_sql_query()里有一个chunksize可以分批返回chun ...
- 疑问:Spring 中构造器、init-method、@PostConstruct、afterPropertiesSet 孰先孰后,自动注入发生时间
一.前言 spring的一大优点就是扩展性很强,比如,在spring bean 的生命周期中,给我们预留了很多参与bean 的生命周期的方法.大致梳理一下,有以下几种: 通过实现 Initializi ...
- Java生鲜电商平台-微服务架构概述
Java生鲜电商平台-微服务架构概述 单体架构存在的问题 在传统的软件技术架构系统中,基本上将业务功能集中在单一应用内,或者是单一进程中.尽管现代化的软件架构理论以及设计原则已推广多年,但实际技术衍化 ...
- Nginx+keepalived(高可用主备模式)
Nginx+keepalived(高可用主备模式) 环境:centos6.7 准备:两台服务器(虚拟机).两台应用(Tomcat).Nginx.keepalived server1:192.168.2 ...
- Vue-router中的history模式和hash模式
还记得在我们从零开始搭建一个Vue-cli3.0项目时,预设置中出现过这样一条询问: 即是否选择历史模式,当时我们很坚决地选了否,那么哈希模式和历史模式究竟有什么区别,今天我们来一探究竟. 哈希模式( ...
- 使用element-ui的el-menu导航选中后刷新页面保持当前选中
<el-menu :default-active=‘$route.path‘ :router=‘true‘ :unique-opened=‘true‘ :default-openeds=&quo ...
- 2019年上半年收集到的人工智能Python编程干货文章
2019年上半年收集到的人工智能Python编程干货文章 一文了解Python深拷贝与浅拷贝问题 Python广度优先查找和深度优先查找(内附python教程分享) Python基础之函数2 (参数的 ...
- weblogic 安装及配置
修改AdminServer为不需要输入密码的方式开启 : 安装使用的是production模式,不是开发模式,如果要后台启动Weblogic, 需要在如下DOMAIN_HOME/servers/Adm ...