题解:

简单KM

把每一个男的和房子分离

代码:

#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>
using namespace std;
const int NN=,MM=;
int a[NN][NN],v[NN][NN],g[NN][NN],lk[MM],lx[MM],ly[MM];
int visx[MM],visy[MM],slack[MM],N,M,n,n1,n2,cnt,ans;
int dfs(int x)
{
visx[x]=cnt;
for (int y=;y<=n;y++)
{
if (visy[y]==cnt) continue;
int t=lx[x]+ly[y]-g[x][y];
if (!t)
{
visy[y]=cnt;
if (!lk[y]||dfs(lk[y])){lk[y]=x;return ;}
}
else if (slack[y]>t) slack[y]=t;
}
return ;
}
void KM()
{
memset(lk,,sizeof(lk));
memset(lx,,sizeof(lx));
memset(ly,,sizeof(ly));
for (int i=;i<=n;i++)
for (int j=;j<=n;j++)lx[i]=max(lx[i],g[i][j]);
for (int x=;x<=n;++x)
{
for (int i=;i<=n;i++)slack[i]=1e9;
while (cnt++,!dfs(x))
{
int d=1e9;
for (int i=;i<=n;i++)
if (visy[i]!=cnt) d=min(d,slack[i]);
for (int i=;i<=n;i++)
{
if (visx[i]==cnt) lx[i]-=d;
if (visy[i]==cnt) ly[i]+=d;
else slack[i]-=d;
}
}
}
return;
}
void work()
{
n1=n2=ans=;
for (int i=;i<=N;i++)
for (int j=;j<=M;j++)
{
for (a[i][j]=getchar();a[i][j]!='.'&&a[i][j]!='m'&&a[i][j]!='H';a[i][j]=getchar());
if (a[i][j]=='m') v[i][j]=++n1;
if (a[i][j]=='H') v[i][j]=++n2;
}
for (int i=;i<=N;i++)
for (int j=;j<=M;++j)
{
if (a[i][j]!='m') continue;
for (int p=;p<=N;p++)
for (int q=;q<=M;q++)
if (a[p][q]=='H') g[v[i][j]][v[p][q]]=-abs(i-p)-abs(j-q);
}
n=n1;
KM();
for (int i=;i<=n;i++)ans+=lx[i]+ly[i];
printf("%d\n",-ans);
return;
}
int main()
{
while (~scanf("%d%d",&N,&M)&&N|M) work();
return ;
}

poj2195的更多相关文章

  1. POJ-2195 Going Home---KM算法求最小权值匹配(存负边)

    题目链接: https://vjudge.net/problem/POJ-2195 题目大意: 给定一个N*M的地图,地图上有若干个man和house,且man与house的数量一致.man每移动一格 ...

  2. POJ2195 Going Home —— 最大权匹配 or 最小费用最大流

    题目链接:https://vjudge.net/problem/POJ-2195 Going Home Time Limit: 1000MS   Memory Limit: 65536K Total ...

  3. POJ-2195(最小费用最大流+MCMF算法)

    Going Home POJ-2195 这题使用的是最小费用流的模板. 建模的时候我的方法出现错误,导致出现WA,根据网上的建图方法没错. 这里的建图方法是每次到相邻点的最大容量为INF,而花费为1, ...

  4. POJ2195 Going Home[费用流|二分图最大权匹配]

    Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22088   Accepted: 11155 Desc ...

  5. POJ2195 最小费用流

    题目:http://poj.org/problem?id=2195 处理出每个人到每个门的曼哈顿距离,分别建立容量为1费用为曼哈顿距离的边,在源点和每个人人之间建立容量为1费用为0的边,在门和汇点之间 ...

  6. POJ2195 Going Home

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22091   Accepted: 11156 Description On ...

  7. POJ2195 Going Home 【最小费用流】+【最佳匹配图二部】

    Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 18169   Accepted: 9268 Descr ...

  8. poj-2195(最小费用流)

    题意:给你一个n*m的地图,H代表这个点有一个房子,m代表这个点是一个人,每次h走一步就花费一,问最小花费使得每个人能进入一个房间 代码:建立一个源点和汇点,每个人和源点相连,每个房子和汇点相连,每个 ...

  9. POJ2195&&HDU1533(KB11-D 最小费用最大流)

    Going Home Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 23515   Accepted: 11853 Desc ...

  10. POJ2195:Going Home(费用流入门)

    http://poj.org/problem?id=2195 #include <iostream> #include <stdio.h> #include <strin ...

随机推荐

  1. 2017浙江省赛 C - What Kind of Friends Are You? ZOJ - 3960

    地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3960 题目: Japari Park is a large zoo ...

  2. Codeforces Round #409 (rated, Div. 2, based on VK Cup 2017 Round 2) D. Volatile Kite

    地址:http://codeforces.com/contest/801/problem/D 题目: D. Volatile Kite time limit per test 2 seconds me ...

  3. IOS开发-数据库总结

    关于数据存储概念: 数据结构: 基本对象:NSDictionary.NSArray和NSSet这些对象. 复杂对象:关系模型.对象图和属性列表多种结构等. 存储方式: 内存:内存存储是临时的,运行时有 ...

  4. UI自动化测试框架之Selenium关键字驱动 (转)

    摘要 自动化测试框架demo,用关键字的形式将测试逻辑封装在数据文件中,测试工具解释这些关键字即可对其应用自动化 一.原理及特点 1.   关键字驱动测试是数据驱动测试的一种改进类型 2.    主要 ...

  5. awk二十问-【AWK学习之旅】

    ---===AWK学习之旅===--- 一行命令: 1.打印输入每行的字段总数: 最后一行的字段总数:END{print NF} 每行都显示字段总数: {print NF}   2.打印指定行: aw ...

  6. 20145303 《Java程序设计》第7周学习总结

    20145303 <Java程序设计>第7周学习总结 教材学习内容总结 时间的度量 格林威治标准时间(GMT),现已不作为标准时间使用,即使标注为GMT(格林威治时间),实际上谈到的的是U ...

  7. vector vector int 初始化

    方法一: vector<vector<int>>array=(2,vector<int>()); array[0].push_back(1); array[i].p ...

  8. RabbitMQ Network Partitions

    Clustering and Network Partitions RabbitMQ clusters do not tolerate network partitions well. If you ...

  9. 初入spring boot(七 )Spring Data JPA

    Spring Data JPA通过提供基于JPA的Repository极大地减少JPA作为数据访问方案的代码量. 1.定义数据访问层 使用Spring Data JPA建立数据访问层十分简单,只需定义 ...

  10. webservice使用注解修改WSDL内容

    首先看我们没有修改前的WSDL内容 此时服务端的类 修改后的 注解如下 package com.xiaostudy; import javax.jws.WebMethod; import javax. ...