HDU [P1533]
二分图带权最小匹配(朴素)
只要换几个不等号的方向就行,不需要变换权值的正负
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
using namespace std;
int n,m,wei[105][105],lx[105],ly[105],match[105];
bool fx[105],fy[105];
struct point{
int x,y;
}men[105],hou[105];
bool hungarian(int u){
fx[u]=1;
for(int v=1;v<=m;v++){
if(!fy[v]&&(lx[u]+ly[v]==wei[u][v])){
fy[v]=1;
if(!match[v]||hungarian(match[v])){
match[v]=u;
return 1;
}
}
}
return 0;
}
int main(){
while(1){
int row,col;
cin>>row>>col;
if(!row&&!col) break;
n=m=0;
for(int i=1;i<=row;i++){
for(int j=1;j<=col;j++){
char t;
scanf(" %c ",&t);
if(t=='m') men[++n].x=i,men[n].y=j;
if(t=='H') hou[++m].x=i,hou[m].y=j;
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
// printf("%d %d %d %d\n",men[i].x,men[i].y,hou[j].x,hou[j].y);
wei[i][j]=abs(men[i].x-hou[j].x)+abs(men[i].y-hou[j].y);
}
}
memset(lx,0x3f,sizeof(lx)); //
memset(ly,0,sizeof(ly));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
lx[i]=min(lx[i],wei[i][j]);
}
}
memset(match,0,sizeof(match));
for(int i=1;i<=n;i++){
while(1){
memset(fx,0,sizeof(fx));
memset(fy,0,sizeof(fy));
if(hungarian(i)) break;
int mi=-0x3f3f3f3f; //
for(int k=1;k<=n;k++){
if(fx[k]){
for(int j=1;j<=m;j++){
if(!fy[j]&&(lx[k]+ly[j]-wei[k][j])>mi){ //
mi=lx[k]+ly[j]-wei[k][j];
}
}
}
}
for(int i=1;i<=n;i++){
if(fx[i]) lx[i]-=mi;
}
for(int i=1;i<=m;i++){
if(fy[i]) ly[i]+=mi;
}
}
}
int ans=0;
for(int i=1;i<=m;i++){
if(match[i]) ans+=wei[match[i]][i];
//cout<<ans<<endl;
}
cout<<ans<<endl;
}
}
HDU [P1533]的更多相关文章
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
- HDU 4006The kth great number(K大数 +小顶堆)
The kth great number Time Limit:1000MS Memory Limit:65768KB 64bit IO Format:%I64d & %I64 ...
- HDU 1796How many integers can you find(容斥原理)
How many integers can you find Time Limit:5000MS Memory Limit:32768KB 64bit IO Format:%I64d ...
- hdu 4481 Time travel(高斯求期望)(转)
(转)http://blog.csdn.net/u013081425/article/details/39240021 http://acm.hdu.edu.cn/showproblem.php?pi ...
- HDU 3791二叉搜索树解题(解题报告)
1.题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=3791 2.参考解题 http://blog.csdn.net/u013447865/articl ...
- hdu 4329
problem:http://acm.hdu.edu.cn/showproblem.php?pid=4329 题意:模拟 a. p(r)= R'/i rel(r)=(1||0) R ...
随机推荐
- hihoCoder1498-Diligent Robots
#1498 : Diligent Robots Time Limit:10000ms Case Time Limit:1000ms Memory Limit:256MB Description The ...
- 来说说datatype
今天敲代码一直卡在一个问题上面好久那就是--datatype的未定义,起初不晓得datatype的含义,遇到这种情况首先想到的就是自己又忘记加上面头文件了.随即写了个stdlib.h上去.可是问题并没 ...
- Proxy 那点事儿
---恢复内容开始--- 尊重原创:https://my.oschina.net/huangyong/blog/159788 Proxy,也就是"代理"了.意思就是,你不用去做,别 ...
- linux下删除.svn的方法
find ./ -type d -name ".svn" | xargs rm -rf
- js代码性能优化的几个方法
相信写代码对于大部分人都不难,但想写出高性能的代码就需要一定的技术积累啦,下面是一些优化JavaScript代码性能的常见方法. 一.注意作用域 1.避免全局查找 使用全局变量和函数肯定要比局部的开销 ...
- Unix/Linux命令:FTP
在Unix/Linux系统中,ftp命令用来实现客户机和远程主机之的文件传输. 语法:ftp [-Apinegvtd] [hostname] 参数:-p : 传输文件模式为被动模式-i : 关闭交互模 ...
- 洛谷 P1231 教辅的组成
P1231 教辅的组成 题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习 ...
- diffMerge安装配置使用
概述: 在用git进行源代码版本维护的时候,常常会进行各代码版本之前区别的查看,例如在每次提交改动前进行git diff 可以看到源文件代码相对相应版本或是远程仓库的改动情况,如果有冲突还需要进行me ...
- java —— 内部类
_ 普通内部类 静态内部类 局部内部类 匿名内部类 内部类 内部类是定义在另一个类中的类,定义内部类会起到的作用有以下三点: 1.内部类方法访问该类定义所在的作用域中的数据,包括私有的数据. 2.内部 ...
- google的grpc在golang中的使用
GRPC是google开源的一个高性能.跨语言的RPC框架,基于HTTP2协议,基于protobuf 3.x,基于Netty 4.x. 前面写过一篇golang标准库的rpc包的用法,这篇文章接着讲一 ...