hdu 1533 Going Home(KM)
来源:互联网 发布:国企 保障房 知乎 编辑:程序博客网 时间:2024/05/16 10:24
#include<stdio.h>#include<string.h>#include<math.h>#define max(a,b)(a>b?a:b)#define min(a,b)(a<b?a:b)#define inf 999999999#define size 110int n,m,map[size][size],lx[size],ly[size],match[size];int visitx[size],visity[size];struct node{int x,y;}a[size],b[size];int find(int u){ visitx[u]=true; for(int i=1;i<=m;i++){ if(!visity[i]&&lx[u]+ly[i]==map[u][i]){ visity[i]=true; if(match[i]==-1||find(match[i])){ match[i]=u; return true ; } } } return false ;}void KM_prefect_match(){int tmp,i,j,k;for(i=1;i<=n;i++) lx[i]=-inf;memset(ly,0,sizeof(ly));for(i=1;i<=n;i++){for(j=1;j<=n;j++)lx[i]=max(lx[i],map[i][j]);}for(i=1;i<=n;i++){while(1){memset(visitx,0,sizeof(visitx));memset(visity,0,sizeof(visity));if(find(i))break;else {tmp=inf;for(j=1;j<=n;j++){if(visitx[j]){for(k=1;k<=n;k++)if(!visity[k])tmp=min(tmp,lx[j]+ly[k]-map[j][k]);}}for(j=1;j<=n;j++){if(visitx[j])lx[j]-=tmp;if(visity[j])ly[j]+=tmp;}}}}}int main(){ while(scanf("%d%d",&n,&m),m+n){ memset(match,-1,sizeof(match)); for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ map[i][j]=-inf; } }char str[size][size];int e=1,ee=1;for(i=0;i<n;i++){scanf("%s",str[i]);for(int j=0;j<m;j++){if(str[i][j]=='m'){a[e].x=i;a[e++].y=j;}else if(str[i][j]=='H'){b[ee].x=i;b[ee++].y=j;}}}for(i=1;i<=e;i++){for(int j=1;j<=ee;j++)map[i][j]=-(abs(a[i].x-b[j].x)+abs(a[i].y-b[j].y));}n=e-1;m=ee-1; KM_prefect_match(); int ans=0; for(i=1;i<=n;i++) ans+=map[match[i]][i]; printf("%d\n",-ans); } return 0;}
0 0
- hdu 1533 Going Home(KM)
- HDU 1533 Going Home (KM)
- hdu 1533 Going Home(最小权匹配KM)
- HDU 1533 Going Home(KM完美匹配)
- hdu 1533 Going Home (最大权匹配,KM算法)
- hdu 1533 Going Home(KM 最小权值匹配)
- hdu 1533 Going Home (KM裸题)
- HDU--1533--Going Home--KM算法
- hdu 1533 Going Home (KM算法)
- HDU 1533 Going Home【km应用】
- hdu 1533 Going Home(二分KM算法)
- hdu 1533 Going Home KM算法
- hdu 1533 Going Home【KM匹配】
- hdu 1533 going home KM算法
- HDU 1533 Going Home【KM算法】
- hdoj--1533--Going Home(KM)
- [POJ2195]Going Home(KM)
- hdu 1533 Going Home【KM算法求最大权匹配】
- hdoj 1394 Minimum Inversion Number 【线段数】
- HDU4902Nice boat (线段树区间更新+lazytag)
- 自创Java精简建表框架
- hdu 1220 Cube
- 关于eclipse的一些下载地址
- hdu 1533 Going Home(KM)
- 信号量和互斥量(锁)的区别
- 双向广搜
- 杭电1239————缩小数据范围的暴力搜索(水题)
- 找不到R.styleable
- GCD && Run Loops学习笔记
- Linux 程序设计学习笔记----文件管理实例应用
- PullToRefresh使用详解(一)--构建下拉刷新的listView
- python字符串