POJ 2195
#include<iostream>//by Chengdacaizi
#include<stdio.h>
#include<vector>
#include<algorithm>
#include<math.h>
#define MAXN 105
#include <string>
#define inf 1000000000
#define _clr(x) memset(x,0xff,sizeof(int)*n)
using namespace std; int _m[MAXN][MAXN];
vector<int> man;
vector<int> hou;
int match1[MAXN];
int match2[MAXN];
int kuhn_munkras(int m,int n,int mat[][MAXN],int* match1,int* match2); int main()
{
//freopen("acm.acm","r",stdin);
int n;
int m;
int i;
int j;
char c;
int tem1;
int tem2;
int temj1;
int temj2;
while(cin>>n>>m)
{
memset(_m,,sizeof(_m));
if(!n&&!m)
break;
for(i = ; i < n; ++ i)
{
for(j = ; j < m; ++ j)
{
cin>>c;
if(c == 'm')
man.push_back(i*m+j);
else if(c == 'H')
hou.push_back(i*m+j);
}
}
for(i = ; i < man.size(); ++ i)
{
for(j = ; j < hou.size(); ++ j)
{
tem1 = man[i]/m;
tem2 = man[i]%m;
temj1 = hou[j]/m;
temj2 = hou[j]%m;
_m[i][j] = (-)*(abs(tem1 - temj1) + abs(tem2 - temj2));
}
} m = man.size();
n = hou.size();
if(m>n)
iter_swap(&m,&n);
cout<<-kuhn_munkras(m,n,_m,match1,match2)<<endl;
man.clear();
hou.clear();
}
} int kuhn_munkras(int m,int n,int mat[][MAXN],int* match1,int* match2){
int s[MAXN],t[MAXN],l1[MAXN],l2[MAXN],p,q,ret=,i,j,k;//最佳匹配
for (i=;i<m;i++)
for (l1[i]=-inf,j=;j<n;j++)
l1[i]=mat[i][j]>l1[i]?mat[i][j]:l1[i];
for (i=;i<n;l2[i++]=);
for (_clr(match1),_clr(match2),i=;i<m;i++){
for (_clr(t),s[p=q=]=i;p<=q&&match1[i]<;p++)
for (k=s[p],j=;j<n&&match1[i]<;j++)
if (l1[k]+l2[j]==mat[k][j]&&t[j]<){
s[++q]=match2[j],t[j]=k;
if (s[q]<)
for (p=j;p>=;j=p)
match2[j]=k=t[j],p=match1[k],match1[k]=j;
}
if (match1[i]<){
for (i--,p=inf,k=;k<=q;k++)
for (j=;j<n;j++)
if (t[j]<&&l1[s[k]]+l2[j]-mat[s[k]][j]<p)
p=l1[s[k]]+l2[j]-mat[s[k]][j];
for (j=;j<n;l2[j]+=t[j]<?:p,j++);
for (k=;k<=q;l1[s[k++]]-=p);
}
}
for (i=;i<m;i++)
ret+=mat[i][match1[i]];
return ret;
}
关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。

技术网站地址: vmfor.com
POJ 2195的更多相关文章
- POJ 2195 Going Home 最小费用最大流 尼玛,心累
D - Going Home Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Subm ...
- poj 2195 二分图带权匹配+最小费用最大流
题意:有一个矩阵,某些格有人,某些格有房子,每个人可以上下左右移动,问给每个人进一个房子,所有人需要走的距离之和最小是多少. 貌似以前见过很多这样类似的题,都不会,现在知道是用KM算法做了 KM算法目 ...
- POJ 2195 Going Home / HDU 1533(最小费用最大流模板)
题目大意: 有一个最大是100 * 100 的网格图,上面有 s 个 房子和人,人每移动一个格子花费1的代价,求最小代价让所有的人都进入一个房子.每个房子只能进入一个人. 算法讨论: 注意是KM 和 ...
- POJ 2195 Going Home (带权二分图匹配)
POJ 2195 Going Home (带权二分图匹配) Description On a grid map there are n little men and n houses. In each ...
- poj 2195 Going Home(最小费最大流)
poj 2195 Going Home Description On a grid map there are n little men and n houses. In each unit time ...
- 【POJ 2195】 Going Home(KM算法求最小权匹配)
[POJ 2195] Going Home(KM算法求最小权匹配) Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submiss ...
- POJ 2195:Going Home(最小费用最大流)
http://poj.org/problem?id=2195 题意:有一个地图里面有N个人和N个家,每走一格的花费是1,问让这N个人分别到这N个家的最小花费是多少. 思路:通过这个题目学了最小费用最大 ...
- poj 2195 KM算法
题目链接:http://poj.org/problem?id=2195 KM算法模板~ 代码如下: #include "stdio.h" #include "string ...
- Poj(2195),最小费用流,SPFA
题目链接:http://poj.org/problem?id=2195 Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submi ...
- poj 2195 Going Home(最小费用最大流)
题目:http://poj.org/problem?id=2195 有若干个人和若干个房子在一个给定网格中,每人走一个都要一定花费,每个房子只能容纳一人,现要求让所有人进入房子,且总花费最小. 构造一 ...
随机推荐
- 统计工具之QQ图
正态 QQ 图和普通 QQ 图 分位数-分位数 (QQ) 图是两种分布的分位数相对彼此进行绘制的图.评估数据集是否正态分布,并分别研究两个数据集是否具有相似的分布. 如何构建正态 QQ 图 首先,数据 ...
- 非关系型数据库SequoiaDB虚拟机下应用再探
上一次浅谈了SequoiaDB在虚拟机上的安装及在web下图形界面的基本操控,现在来体验命令行操作及运行samples文件. 基本DDL操作 首先在视窗窗口同时按Ctrl+Alt+T,进入到命令行窗口 ...
- ListView的多布局中的小问题
今天用到了ListView的多布局,我们需要额外重写两个方法 //返回多布局的个数 @Override public int getViewTypeCount() { return 3; } //用该 ...
- file_get_contents函数和curl函数不能用
某天file_get_contents()突然不能用了,检查了下php配置文件 allow_url_fopen=on 没问题 各种重启也没用 最后在ssh下执行 chmod 755 /etc/re ...
- shell if判断的种类
if [ $# != 1 ] ; then echo "USAGE: $0 TABNAME" echo " e.g.: $0 CDR_CALL_20040701" ...
- Java内部实现的观察者模式小记
假如Admin要观察User的工资变化,当User的工资增加或者减少时,都会引起Admin输出相应的信息. 定义观察者接口:MyObserver.java package cn.liuning.wat ...
- WebSocket学习
在HTML5规范中,我最喜欢的Web技术就是正迅速变得流行的WebSocket API.WebSocket提供了一个受欢迎的技术,以替代我们过去几年一直在用的Ajax技术.这个新的API提供了一个方法 ...
- Keystore概念,Keytool工具使用
几个概念 keystore是一个密码保护的文件,用来存储密钥和证书(也就是说,keystore中存储的有两类型entries):这个文件(默认的)位于你的home目录,也就是你登录到操作系统的用户名的 ...
- Posix线程编程指南(1) 线程创建与取消
线程创建 1.1 线程与进程 相对进程而言,线程是一个更加接近于执行体的概念,它可以与同进程中的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列.在串行程序基础上引入线程和进程是为了提高程序的 ...
- 关于通过JS识别浏览器类型的方法
JS检测浏览器类型的方法 网络上一般采用navigator.userAgent判断浏览器标识的办法,但是有个麻烦的问题是IE11不断升级之后,IE11的userAgent变成: "Moz ...