<题目链接>

题目大意:
给你一张地图,地图上m代表人,H代表房子,现在所有人要走到房子内,且一个房子只能容纳一个人(人和房子的数量相同),人每移动一步,需要花1美元,问所有人走到房子中的最小花费。

解题分析:
一个人对应一个房子,并且人与房子之间的花费相当于权值,很明显的最大权完美匹配,直接套用KM算法即可。

 #include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; #define INF 0x3f3f3f3f
#define rep(i,s,t) for(int i=s;i<=t;i++)
#define mem(a,b) memset(a,b,sizeof(a))
#define mp make_pair
#define fi first
#define se second
const int N = ;
char str[];
typedef pair<int,int>pii;
int n,m,nx,ny;
int lx[N],ly[N];
int linker[N],slack[N],visx[N],visy[N],w[N][N];
pii locx[N],locy[N]; //记录二分图中x,y两部分所有点的坐标
inline int dis(pii tmp1,pii tmp2){ //计算两点之间的花费
return (abs(tmp1.fi-tmp2.fi)+abs(tmp1.se-tmp2.se));
}
bool DFS(int x){
visx[x]=;
rep(y,,ny){
if(visy[y])continue;
int tmp=lx[x]+ly[y]-w[x][y];
if(!tmp){
visy[y]=;
if(linker[y]==-||DFS(linker[y])){
linker[y]=x;
return true;
}
}else slack[y]=min(slack[y],tmp);
}
return false;
}
int KM(){
mem(linker,-);mem(ly,);
rep(i,,nx){
lx[i]=-INF;
rep(j,,ny)lx[i]=max(lx[i],w[i][j]);
}
rep(x,,nx){
rep(i,,ny)slack[i]=INF;
while(true){
mem(visx,);mem(visy,);
if(DFS(x))break;
int d=INF;
rep(i,,ny)if(!visy[i])d=min(d,slack[i]);
rep(i,,nx)if(visx[i])lx[i]-=d;
rep(i,,ny)
if(visy[i])ly[i]+=d;
else slack[i]-=d;
}
}
int res=;
rep(y,,ny)
if(linker[y]!=-)
res+=w[linker[y]][y];
return res;
}
int main(){
while(~scanf("%d%d",&n,&m),n||m){
nx=ny=;
rep(i,,n){
scanf("%s",str+);
rep(j,,m){
if(str[j]=='m')locx[++nx]=mp(i,j); //存下x,y两部分坐标
if(str[j]=='H')locy[++ny]=mp(i,j);
}
}
rep(i,,nx) rep(j,,ny){
w[i][j]=-dis(locx[i],locy[j]); //得到两点之间的最短距离,也就是人到对应的房子所需花的钱,因为最后要求最小花费,所以这里要先取反
}
printf("%d\n",(-)*KM()); //得到最小花费
}
}

2018-11-18

HDU 1533 Going Home (最大权完美匹配)的更多相关文章

  1. HDU 1533 Going Home(KM完美匹配)

    HDU 1533 Going Home 题目链接 题意:就是一个H要相应一个m,使得总曼哈顿距离最小 思路:KM完美匹配,因为是要最小.所以边权建负数来处理就可以 代码: #include <c ...

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

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

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

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

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

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

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

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

  6. 二分图学习记 之 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. hdu 1853 Cyclic Tour 最大权值匹配 全部点连成环的最小边权和

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=1853 Cyclic Tour Time Limit: 1000/1000 MS (Java/Others) ...

随机推荐

  1. SQL Server2008从入门到精通pdf

    下载地址:网盘下载 内容介绍 编辑 <SQL Server 从入门到精通>从初学者的角度出发,通过通俗易懂的语言.丰富多彩的实例,详细地介绍了SQLServer2008开发应该掌握的各方面 ...

  2. Vue.extend和Vue.component的联系与差异

    extend 是构造一个组件的语法器. 你给它参数 他给你一个组件 然后这个组件 你可以作用到Vue.component 这个全局注册方法里, 也可以在任意vue模板里使用apple组件 var ap ...

  3. Java语法基础常见疑惑解答

    1. 类是java的最小单位,java的程序必须在类中才能运行 2. java函数加不加static有何不同 java中声明为static的方法称为静态方法或类方法.静态方法可以直接调用静态方法,访问 ...

  4. Android源码分析二 硬件抽象层(HAL)

    一 什么是HAL HAL 可定义一个标准接口以供硬件供应商实现,这可让 Android 忽略较低级别的驱动程序实现.借助 HAL,您可以顺利实现相关功能,而不会影响或更改更高级别的系统.HAL 实现会 ...

  5. cf478d 线性dp好题

    /* 给定r个红块,g个绿块,按要求堆放 问当堆放成最大高度时,有多少种可能的堆放方式 排列要求:1.第i行放i块 2.每行同色 首先当然要确定能够放置几行 设红块有r个,绿块有g个,那么放置h行需要 ...

  6. spring boot引入json,jsonobject,需要指定jdk15

    spring boot引入json,需要指定jdk15 <dependency> <groupId>net.sf.json-lib</groupId> <ar ...

  7. PEM routines:PEM_read_bio:no start line

    https://blog.csdn.net/xiejunna/article/details/71151006 在放置证书后,运行nodejs抛异常:PEM routines:PEM_read_bio ...

  8. Description Resource Path Location Type Project configuration is not up-to-date with pom.xml. Select: Maven->Update Project... from the project context menu or use Quick Fix. spark-MT line 1 Maven Co

    1.相信大家新建的maven项目,然后添加好依赖(即修改了pom.xml文件以后就会出现如下所示的错误): Description Resource Path Location Type Projec ...

  9. 一脸懵逼学习Hadoop中的MapReduce程序中自定义分组的实现

    1:首先搞好实体类对象: write 是把每个对象序列化到输出流,readFields是把输入流字节反序列化,实现WritableComparable,Java值对象的比较:一般需要重写toStrin ...

  10. [转] AES,SHA1,DES,RSA,MD5区别

    AES:更快,兼容设备,安全级别高: SHA1:公钥后处理回传 DES:本地数据,安全级别低 RSA:非对称加密,有公钥和私钥 MD5:防篡改 相关: 公开密钥加密(英语:public-key cry ...