hdu 1533KM算法
#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算法的更多相关文章
- HDU SPFA算法 Invitation Cards
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1535 分析: 题意:求1点到其它点的最短距离之和+其它点到1点的最短距离之和 前面一部分直接用SPFA ...
- hdu 2255KM算法模板
#include<stdio.h> #include<string.h> #define N 400 #define inf 0x7fffffff int Max(int a ...
- hdu 2435dinic算法模板+最小割性质
hdu2435最大流最小割 2014-03-22 我来说两句 来源:hdu2435最大流最小割 收藏 我要投稿 2435 There is a war 题意: 给你一个有向图,其中可以有一条边是无敌的 ...
- ACM: HDU 1869 六度分离-Dijkstra算法
HDU 1869六度分离 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descri ...
- ACM: HDU 3790 最短路径问题-Dijkstra算法
HDU 3790 最短路径问题 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Des ...
- ACM: HDU 2544 最短路-Dijkstra算法
HDU 2544最短路 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descrip ...
- ACM: HDU 1874 畅通工程续-Dijkstra算法
HDU 1874 畅通工程续 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Desc ...
- hdu 1385 Minimum Transport Cost (floyd算法)
貌似···················· 这个算法深的东西还是很不熟悉!继续学习!!!! ++++++++++++++++++++++++++++ ======================== ...
- 字符串_KMP算法(求next[]模板 hdu 1711)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1711 问题描述:给两个序列a,b,长度分别为n,m(1<=n<=1000000,1< ...
随机推荐
- nginx 多进程 + io多路复用 实现高并发
一.nginx 高并发原理 简单介绍:nginx 采用的是多进程(单线程) + io多路复用(epoll)模型 实现高并发 二.nginx 多进程 启动nginx 解析初始化配置文件后会 创建(for ...
- mongodb的安装以及客户端
mongodb是一种非关系型的数据库,与传统的sql有很大的不同,但都是用于数据管理的,本人也是初学,很多地方都是模仿,在这里只是记录本人初次安装mongodb和客户端,记录一下安装的步骤,以便以后用 ...
- Oracle 参考脚本
一.创建物化视图 --新建表空间 CREATE TABLESPACE MLOG_TBS LOGGING DATAFILE 'mlog_tbs.dbf' SIZE 32M AUTOEXTEND ON N ...
- 北工大2017校赛 1101:要打车的FanZzz
题目链接: http://bjutacm.openjudge.cn/lianxi/1101/ 思路: 二分 + 二分图最大匹配. 开始的时候我想直接用最小费用流模型,后来发现这样是错误的.因为这道题实 ...
- 常见Z纯CSS小样式合集(三角形)
三角形 .sanjiao{ width:0px; height: 0px; overflow: hidden; border-width: 100px; border-color: transpare ...
- springboot项目中,@transactional 无效
问题: springboot项目,依然是使用jpa.Hibernate来操作mysql,涉及到数据库的操作,就少不了事务.写了一个接口,用来测试@Transaction注解的作用,发现没有效果 分析: ...
- oracle 手动配置服务器端和客户端
1.oracle 服务器端配置 将oracle安装完成之后,在Net Configuration Assistant配置 1.监听程序配置 先找到Net Configuration Assistant ...
- 如何把mysql的列修改成行显示数据简单实现
如何把mysql的列修改成行显示数据简单实现 创建测试表: 1: DROP TABLE IF EXISTS `test`; 2: CREATE TABLE `test` ( 3: `year` int ...
- MySQL 8.*版本 修改root密码
MySQL .*版本 修改root密码 查看版本:select version() from dual; 1.6. 登录mysql: 登录mysql:(因为之前没设置密码,所以密码为空,不用输入密码, ...
- 02Oracle Database 安装,卸载,系统服务,系统组件及系统表空间
Oracle Database 安装,卸载,系统服务,系统组件及系统表空间 Oracle Database 安装 Oracle Database 卸载 Oracle Database 系统服务 Ora ...