#include<stdio.h>

#include<string.h>

#include<math.h>

#define inf 0x3fffffff

#define N 300

int map[N][N];

char s[N][N];

int ss[N],tt[N],mark[N],lx[N],ly[N];

struct node{

int x,y;

}man[N],hos[N];

int link[N],n;

int find(int u) {

ss[u]=1;

int i;

for(i=1;i<=n;i++)

if(!tt[i]&&lx[u]+ly[i]==map[u][i]) {

    tt[i]=1;

    if(link[i]==-1||find(link[i])) {

        link[i]=u;

        return 1;

    }

}

return 0;

}

int Max(int a,int b) {

return a>b?a:b;

}

int Min(int a,int b) {

return a>b?b:a;

}

int KM() {

    int d,i,j,k,sum=0;

    memset(link,-1,sizeof(link));

    memset(ly,0,sizeof(ly));

    for(i=1;i<=n;i++) {

            lx[i]=-inf;

        for(j=1;j<=n;j++)

        lx[i]=Max(lx[i],map[i][j]);

    }

    for(i=1;i<=n;i++) {

     while(1) {

            memset(ss,0,sizeof(ss));

        memset(tt,0,sizeof(tt));

        if(find(i))break;

        d=inf;//注意要在这里初始化

       for(j=1;j<=n;j++) {

        if(ss[j]) {

            for(k=1;k<=n;k++)

                if(!tt[k])

                d=Min(d,lx[j]+ly[k]-map[j][k]);

        }

       }

       for(j=1;j<=n;j++) {

        if(ss[j])lx[j]-=d;

        if(tt[j])ly[j]+=d;

       }

     }

    }

    for(i=1;i<=n;i++)

        sum=sum+map[link[i]][i];

        return -sum;

}

int main() {

    int m,i,j,ma,ho;

    while(scanf("%d%d",&n,&m),n||m) {

        ma=0;ho=0;

    for(i=1;i<=n;i++)

        scanf("%s",s[i]+1);

        ho=0;ma=0;

    for(i=1;i<=n;i++)

    for(j=1;j<=m;j++) {

        if(s[i][j]=='m')

            man[++ma].x=i,man[ma].y=j;

            if(s[i][j]=='H')

                hos[++ho].x=i,hos[ho].y=j;

    }

    for(i=1;i<=ma;i++)

        for(j=1;j<=ma;j++)

        map[i][j]=-1*(fabs(1.0*man[i].x-1.0*hos[j].x)+fabs(1.0*man[i].y-1.0*hos[j].y));

        n=ma;

    printf("%d\n",KM());

        }

return 0;

}

hdu 1533KM算法的更多相关文章

  1. HDU SPFA算法 Invitation Cards

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1535 分析: 题意:求1点到其它点的最短距离之和+其它点到1点的最短距离之和 前面一部分直接用SPFA ...

  2. hdu 2255KM算法模板

    #include<stdio.h> #include<string.h> #define N  400 #define inf 0x7fffffff int Max(int a ...

  3. hdu 2435dinic算法模板+最小割性质

    hdu2435最大流最小割 2014-03-22 我来说两句 来源:hdu2435最大流最小割 收藏 我要投稿 2435 There is a war 题意: 给你一个有向图,其中可以有一条边是无敌的 ...

  4. ACM: HDU 1869 六度分离-Dijkstra算法

    HDU 1869六度分离 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descri ...

  5. ACM: HDU 3790 最短路径问题-Dijkstra算法

    HDU 3790 最短路径问题 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Des ...

  6. ACM: HDU 2544 最短路-Dijkstra算法

    HDU 2544最短路 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descrip ...

  7. ACM: HDU 1874 畅通工程续-Dijkstra算法

    HDU 1874 畅通工程续 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Desc ...

  8. hdu 1385 Minimum Transport Cost (floyd算法)

    貌似···················· 这个算法深的东西还是很不熟悉!继续学习!!!! ++++++++++++++++++++++++++++ ======================== ...

  9. 字符串_KMP算法(求next[]模板 hdu 1711)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 问题描述:给两个序列a,b,长度分别为n,m(1<=n<=1000000,1< ...

随机推荐

  1. 一个简陋的个人小项目,也是个人第一个真正意义上的独立项目——Graph

    由来 我最早接触到图这个概念是在大二的离散数学当中图论相关的内容,当时是以著名的哥尼斯堡七桥问题引出图论的概念,现在依然记忆犹新(不过只是记得这个名字,具体的解题思路我重新温习了一下才想起来),当时也 ...

  2. mysql——免安装配置

    1.下载 (1)下载地址:https://dev.mysql.com/downloads/mysql/ (2)选择下载 2.配置环境变量 (1)解压目录:D:\mysql-8.0.16-winx64 ...

  3. moiezen

    这题是个随机化+二分裸题--------考场上居然没有想出来--想的出来就怪了吧 我们随机一下增加x的顺序,然后进行二分之前,看看这个x加完之后能不能更新答案,不能就不二分了.具题解所说,这个复杂度是 ...

  4. SparkContext, map, flatMap, zip以及例程wordcount

    SparkContext 通常作为入口函数,可以创建并返回一个RDD. 如把Spark集群当作服务端那Spark Driver就是客户端,SparkContext则是客户端的核心: 如注释所说 Spa ...

  5. Asp.net:MVC认识

    用MVC框架好长一段时间,发现每天都是写业务代码,不想每天只为了工作而写代码,想把工作中认识的MVC框架,遇到的问题,有时候天天在用,但是不知道里面是什么东西,什么原理,为啥這样写等一系列问题.进行梳 ...

  6. Git在工作中对项目的操作流程

    Git 的准备工作 第一步:Git初始化 第一次在电脑上使用时,应该初始化操作,以后再使用Git操作,无需初始化,直接进行Git其他操作 git config --global user.name & ...

  7. python网络爬虫。第一次测试-有道翻译

    2018-03-0720:53:56 成功的效果如下 代码备份 # -*- coding: UTF-8 -*- from urllib import request from urllib impor ...

  8. django.db.utils.OperationalError: (1050, "Table '表名' already exists)解决方法

    django.db.utils.OperationalError: (1050, "Table '表名' already exists)解决方法 找到解决方案,执行: python mana ...

  9. 两年,VMware又重回巅峰?

    两年前,被公有云和容器打的焦头烂额的VMware一度被众多业界人士看衰,营收.股价双双下滑.然而,仅仅经过短短两年时间,VMware已经和AWS,IBM.微软.Rackspace等众多公有云厂商成为合 ...

  10. Angular——自定义过滤器

    基本介绍 除了使用AngularJS内建过滤器外,还可以根业务需要自定义过滤器,通过模块对象实例提供的filter方法自定义过滤器. 基本使用 (1)input是将绑定的数据以参数的形式传入 (2)i ...