Hdu 1533

(1)思路:

KM算法模板题,

将每个人到家的距离求出来,
求出最小的距离,所以可以将距离变为负数,然后求出负数的最大值,就是正数的最小值。

(2)代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#include<utility>
using namespace std;
const int INF = 1e9+10;
vector <pair <int,int> > v1,v2;
char ss[120][120];
int vx[120],vy[120],lx[120],ly[120],n,pre[120],mp[120][120],cha;
int MAX(int x,int y){return x>y?x:y;
}
int MIN(int x,int y){return x<y?x:y;
}
int Dis(pair <int,int> t1,pair <int,int> t2){return abs(t1.first-t2.first)+abs(t1.second-t2.second);
}
bool dfs(int u){vx[u] = 1;for(int v=0;v<n;v++)if(!vy[v]&&lx[u]+ly[v]==mp[u][v]){vy[v] = 1;if(pre[v]==-1||dfs(pre[v])){pre[v] = u;return true;}}else if(!vy[v]){cha = MIN(cha,lx[u]+ly[v]-mp[u][v]);}return false;
}
int km(){memset(ly,0,sizeof(ly));for(int i=0;i<n;i++){lx[i] = mp[i][0];for(int j=1;j<n;j++) lx[i] = MAX(lx[i],mp[i][j]);}memset(pre,-1,sizeof(pre));for(int i=0;i<n;i++){while(true){memset(vx,0,sizeof(vx));memset(vy,0,sizeof(vy));cha = INF;if(dfs(i)) break;for(int j=0;j<n;j++){if(vx[j]==1) lx[j] -= cha;if(vy[j]==1) ly[j] += cha;}}}int ans = 0;for(int i=0;i<n;i++) ans += mp[pre[i]][i];return ans;
}
int main(void)
{int N,M;while(~scanf("%d%d",&N,&M)&&(N+M)){for(int i=1;i<=N;i++) scanf("%s",ss[i]+1);v1.clear();v2.clear();for(int i=1;i<=N;i++){for(int j=1;j<=M;j++)if(ss[i][j]=='m'){v1.push_back(make_pair(i,j));}else if(ss[i][j]=='H'){v2.push_back(make_pair(i,j)); }}n = v1.size();//printf("%d -----",n);for(int i=0;i<n;i++){for(int j=0;j<n;j++){mp[i][j] = -Dis(v1[i],v2[j]);}}printf("%d\n",-km());}return 0;
} 

Hdu 1533(KM算法)相关推荐

  1. hdu 1533 KM匹配

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1533 关于KM的简单讲解&&模板 推荐(写的很详细也很容易理解):http://blog. ...

  2. KM算法(DFS版,优化DFS版,BFS版)

    KM算法的前提是图存在一个完备匹配,因此用于二分图的最佳匹配问题.如果是最大权匹配问题,可以通过加权值为0的边来可以将图的最佳匹配与最大全匹配统一起来:如果是最小权匹配问题,可以通过加权值为-INF的 ...

  3. hdu 2255 奔小康赚大钱--KM算法模板

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:有N个人跟N个房子,每个人跟房子都有一定的距离,现在要让这N个人全部回到N个房子里面去,要 ...

  4. HDU 1853 HDU 3488【有向环最小权值覆盖问题 】带权二分图匹配 KM算法

    HDU 1853 & HDU 3488[有向环最小权值覆盖问题 ]最小费用最大流 In the kingdom of Henryy, there are N (2 <= N <= ...

  5. 【HDU 2255】奔小康赚大钱 (最佳二分匹配KM算法)

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  6. 二分图最大权匹配问题KM算法讲解 HDU 2255 奔小康赚大钱

    作者:logosG 链接:https://www.cnblogs.com/logosG/p/logos.html (讲解的KM算法,特别厉害!!!) KM算法: 现在我们来考虑另外一个问题:如果每个员 ...

  7. KM算法 最优匹配(最大权匹配) hdu 2255 奔小康赚大钱 最小权匹配 poj 2195 Going Home

    最大权二分匹配问题就是给二分图的每条边一个权值,选择若干不相交的边,得到的总权值最大.解决这个问题可以用KM算法.理解KM算法需要首先理解"可行顶标"的概念.可行顶标是指关于二分图 ...

  8. HDU 2255 奔小康赚大钱 带权二分图匹配 KM算法

    奔小康赚大钱 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  9. 奔小康赚大钱 HDU - 2255( 二分图匹配KM算法详解)

    题目 传说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.  这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百 ...

最新文章

  1. Spark编程指南笔记
  2. Java大数,高精度
  3. Tcp方式采集CNC兄弟设备数据
  4. PyTorch基础(九)----- torch.mean()方法
  5. CodeForces - 976F Minimal k-covering
  6. docker-compose 实战案例
  7. canvas笔记-绘制运动小球(落地弹起,遇边回弹)
  8. 优化MySQL,还是使用缓存?
  9. mysql的事务与锁机制
  10. Postman常用方法
  11. Winform开发框架之通用高级查询模块--SNF快速开发平台3.3-Spring.Net.Framework
  12. 接口测试——Jmeter直连数据库无法获取查找到的数据个数
  13. 【BIEE】超过了已配置的最大允许输入记录数
  14. 1.企业安全建设指南(金融行业安全架构与技术实践) --- 企业信息安全建设简介
  15. this指针常识性问题
  16. DP 转移方程 —— 单调队列优化 斜率优化 李超树优化
  17. Python官方中文开发文档
  18. curl的安装与配置
  19. 深圳内推 | 深圳计算科学研究院招聘机器学习助理工程师(校招)
  20. Modbus CRC计算器(编译环境:C-Free 5.0)

热门文章

  1. 【ASP.NET Web】项目实践—网上宠物店11:制作“搜索”页面
  2. TiDB、OceanBase都在谈的HTAP,为何如此燚?
  3. HotSpot垃圾算法实现之记忆集与卡表和写屏障
  4. C++入门——Day1_Start with C++
  5. dcount函数C语言,dcount函数用法
  6. 计算机毕业设计(5)python毕设作品之校园新生报到系统
  7. fsbwlan.exe
  8. [k8s 学习笔记]
  9. MQTT–多个Zigbee监测网络远程监控的实现
  10. HP服务器查看硬件信息命令