题意:给出一个地图,地图上有人和房子,问如何分配哪个人去哪个房子,走的路最短?

这道题是个完备匹配的情况下,问怎么才能走的路最少,可以用KM来做。

只不过KM算法是用来求解最大最优值,所以我们得改一下数据,将每个人去房子的路程都改为负数。

最后再得出 -KM()即刻

 #include<cstdio>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<iostream>
using namespace std;
const int maxn=1e2+;
const int inf=0x3f3f3f3f;
int lx[maxn],ly[maxn];
int match[maxn];
int visx[maxn],visy[maxn];
struct node
{
int x,y;
}a[maxn],b[maxn];
int G[maxn][maxn];
int numa,numb;
int dfs(int k)
{
visx[k]=;
for(int i=;i<=numa;i++){
if(!visy[i]&&G[k][i]==lx[k]+ly[i]){
visy[i]=;
if(!match[i]||dfs(match[i])){
match[i]=k;
return ;
}
}
}
return ;
}
int KM()
{
for(int i=;i<=numa;i++){
lx[i]=-inf,ly[i]=;
for(int j=;j<=numa;j++)
lx[i]=max(lx[i],G[i][j]);
}
for(int k=;k<=numa;k++){
while(){
memset(visx,,sizeof(visx));
memset(visy,,sizeof(visy));
if(dfs(k)) break;
int mn=inf; for(int i=;i<=numa;i++) if(visx[i])
for(int j=;j<=numa;j++) if(!visy[j])
mn=min(mn,lx[i]+ly[j]-G[i][j]);
if(mn==inf) return -;
for(int i=;i<=numa;i++) if(visx[i]) lx[i]-=mn;
for(int i=;i<=numa;i++) if(visy[i]) ly[i]+=mn;
}
}
int ans=;
for(int i=;i<=numa;i++)
if(match[i])
ans+=G[match[i]][i];
return ans;
}
void init()
{
numa=numb=;
memset(match,,sizeof(match));
memset(G,,sizeof(G));
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF){
if(n==&&m==) break;
init();
char t;
for(int i=;i<n;i++){
for(int j=;j<m;j++){
cin>>t;
if(t=='H'){
numa++;
a[numa].x=i;
a[numa].y=j;
}
else if(t=='m'){
numb++;
b[numb].x=i;
b[numb].y=j;
}
}
}
for(int i=;i<=numa;i++){
int x1=a[i].x,y1=a[i].y;
for(int j=;j<=numb;j++){
int x2=b[j].x,y2=b[j].y;
int w=fabs(x1-x2)+fabs(y1-y2);
G[i][j]=-w;
}
}
printf("%d\n",-KM());
}
return ;
}

KM poj 2195的更多相关文章

  1. 【POJ 2195】 Going Home(KM算法求最小权匹配)

    [POJ 2195] Going Home(KM算法求最小权匹配) Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submiss ...

  2. poj 2195 二分图带权匹配+最小费用最大流

    题意:有一个矩阵,某些格有人,某些格有房子,每个人可以上下左右移动,问给每个人进一个房子,所有人需要走的距离之和最小是多少. 貌似以前见过很多这样类似的题,都不会,现在知道是用KM算法做了 KM算法目 ...

  3. POJ 2195 Going Home / HDU 1533(最小费用最大流模板)

    题目大意: 有一个最大是100 * 100 的网格图,上面有 s 个 房子和人,人每移动一个格子花费1的代价,求最小代价让所有的人都进入一个房子.每个房子只能进入一个人. 算法讨论: 注意是KM 和 ...

  4. POJ 2195 Going Home (带权二分图匹配)

    POJ 2195 Going Home (带权二分图匹配) Description On a grid map there are n little men and n houses. In each ...

  5. POJ 2195 Going Home 最小费用最大流 尼玛,心累

    D - Going Home Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Subm ...

  6. 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 ...

  7. poj 2195 KM算法

    题目链接:http://poj.org/problem?id=2195 KM算法模板~ 代码如下: #include "stdio.h" #include "string ...

  8. POJ 2195 Going Home(KM算法模板)

    题目链接:http://poj.org/problem?id=2195 题目大意: 给定一个N*M的地图,地图上有若干个man和house,且man与house的数量一致. man每移动一格需花费$1 ...

  9. poj 2195(KM求最小权匹配)

    题目链接:http://poj.org/problem?id=2195 思路:我们都知道KM使用来求最大权匹配的,但如果要求最小权匹配,只需把图中的权值改为负值,求一次KM,然后权值和取反即可. ht ...

随机推荐

  1. nginx配置之后接口状态200,但是无返回数据问题小记

    nginx配置可能有问题.导致nginx不能解析PHP文件,检测nginx里对于php的配置信息. location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; f ...

  2. C++——流类库与输入/输出

    I/O流的概念 当程序与外界环境进行信息交换时,存在着两个对象,一个是程序中的对象,另一个是文件对象,流是一种抽象,它负责在数据的生产者和数据的消费者之间建立连接,并管理数据的流动.程序建立一个流对象 ...

  3. 占位 RK

    占位 RK include: RK403 RK404

  4. Mac配置环境变量时终端显示bash-3.2解决方案

    1.问题描述 (base) -bash-3.2$ vi ~/.bash_profile (base) -bash-3.2$ source ~/.bash_profile 2.解决方案 无授权转,侵权删 ...

  5. Cron表达式及其使用注意事项

    Cron表达式简介 Cron表达式全程Crontab表达式,是描述Crontab定时任务执行周期的一种语法格式.而Cron表达式严格上来说有许多特别的版本.如:Linux的.Spring的.Quart ...

  6. SequoiaDB 巨杉数据库Docker镜像使用教程

    为方便用户快速体验,SequoiaDB 巨杉数据库提供基于 Docker 的镜像.本文介绍如何在 Docker 环境下部署 SequoiaDB 分布式集群环境.   集群规划 我们准备在五个容器中部署 ...

  7. IntelliJ IDEA快捷键设置

      IntelliJ IDEA是java编程语言开发的集成环境,目前有很多用户喜欢使用IDEA进行相关开发,IDEA使用起来十分方便,本篇博客主要是介绍IDEA快捷键(Keymap)的设置和使用. I ...

  8. HTTP状态码的浪漫故事

    小明是一个程序员,经常加班,在一个和尚部门,一个妹子都没有,所以一直单身. 404(Not Found):服务器无法根据客户端的请求找到资源(网页) 过年回家,老爸老妈给门开一条缝,先看看小明身后-- ...

  9. 并查集-F - How Many Tables

    F - How Many Tables 并查集的模板都能直接套,太简单不注释了,就存个代码 #include<bits/stdc++.h> using namespace std; ; i ...

  10. TCP/IP详解,卷1:协议--ARP:地址解析协议

    引言 本章我们要讨论的问题是只对 T C P / I P 协议簇有意义的 I P 地址.数据链路如以太网或令牌 环网都有自己的寻址机制(常常为 48 bit 地址),这是使用数据链路的任何网络层都必须 ...