poj2195
题解:
简单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的更多相关文章
- POJ-2195 Going Home---KM算法求最小权值匹配(存负边)
题目链接: https://vjudge.net/problem/POJ-2195 题目大意: 给定一个N*M的地图,地图上有若干个man和house,且man与house的数量一致.man每移动一格 ...
- POJ2195 Going Home —— 最大权匹配 or 最小费用最大流
题目链接:https://vjudge.net/problem/POJ-2195 Going Home Time Limit: 1000MS Memory Limit: 65536K Total ...
- POJ-2195(最小费用最大流+MCMF算法)
Going Home POJ-2195 这题使用的是最小费用流的模板. 建模的时候我的方法出现错误,导致出现WA,根据网上的建图方法没错. 这里的建图方法是每次到相邻点的最大容量为INF,而花费为1, ...
- POJ2195 Going Home[费用流|二分图最大权匹配]
Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22088 Accepted: 11155 Desc ...
- POJ2195 最小费用流
题目:http://poj.org/problem?id=2195 处理出每个人到每个门的曼哈顿距离,分别建立容量为1费用为曼哈顿距离的边,在源点和每个人人之间建立容量为1费用为0的边,在门和汇点之间 ...
- POJ2195 Going Home
Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22091 Accepted: 11156 Description On ...
- POJ2195 Going Home 【最小费用流】+【最佳匹配图二部】
Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 18169 Accepted: 9268 Descr ...
- poj-2195(最小费用流)
题意:给你一个n*m的地图,H代表这个点有一个房子,m代表这个点是一个人,每次h走一步就花费一,问最小花费使得每个人能进入一个房间 代码:建立一个源点和汇点,每个人和源点相连,每个房子和汇点相连,每个 ...
- POJ2195&&HDU1533(KB11-D 最小费用最大流)
Going Home Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 23515 Accepted: 11853 Desc ...
- POJ2195:Going Home(费用流入门)
http://poj.org/problem?id=2195 #include <iostream> #include <stdio.h> #include <strin ...
随机推荐
- linux搭建svn服务并手动同步代码到web目录和自动更新
1.安装svn服务端 yum -y install subversion 2.查看安装路径等信息 rpm -ql subversion 3.查看svn帮助信息 svn help 4.创建svn版本库目 ...
- PHP秒杀系统全方位设计分析(一)
秒杀系统特点人多商品少时间短流量高外挂机器[黄牛和非黄牛] 技术分析瞬间高并发的处理能力多层次的分布式处理能力人机交互与对抗[12306验证码图片] 技术选型分析Linux+Nginx+PHP+Mys ...
- VCF和GVCF格式说明
注意:本文的内容主要来自于GATK官网的讲解,所以vcf也是GATK产生的,用其他caller,比如varscan2产生的vcf文件的内容注释可能不一致. 参考:https://gatkforums. ...
- RocEDU.阅读.写作《霍乱时期的爱情》书摘(二)
她不会流一滴眼泪,不会浪费自己的余生,在慢火煮炖的回忆的蛆肉汤中煎熬,不会把自己活活埋葬在四面墙壁之间,成日为自己缝制寿衣,尽管这是当地人乐见寡妇做的事情. 活到这把年纪,人还在的时候就已经腐烂一半了 ...
- 【纯代码】Swift-自定义PickerView单选(可修改分割线颜色、修改字体大小、修改字体颜色。)(可根据需要自己扩展)
typealias PopPickerViewCallBackClosure = (_ resultStr:NSString?) -> () class PopPickerView : UIVi ...
- LeetCode——merge-two-sorted-lists
Question Merge two sorted linked lists and return it as a new list. The new list should be made by s ...
- 【Discriminative Localization】Learning Deep Features for Discriminative Localization 论文解析(转)
文章翻译: 翻译 以下文章来源: 链接
- codeforces 1A - math - ceil
2017-08-24 15:42:30 writer: pprp 感觉自己好菜啊,这个题都没有做的很好 题意很简单,用a * a 的地砖,将 n * m 的地板铺满,问最少需要多少个地砖? 一开始打算 ...
- jQuery Ajax总结
jQuery对Ajax的操作进行了封装.jQuery中\(.ajax()属于最底层的方法,这个放在后面说,首先看看封装了\).ajax()的方法. load()方法 load()可以远程载入HTML并 ...
- kotlin 记录(已弃坑)
kotlin 有些是转载内容 使用nullable值以及空值检测 引用或函数返回值如果可能为null值,则必须显式标记nullable. (在类型后面跟一个问号表示这个对象可能为空,跟两个感叹号表示这 ...