//最近没什么时间quq据说长得帅的人都在切八中,然而长得丑的人只能水水裸题

【题目大意】

给出一张地图及人和房屋的位置,求出每个人回到不同房屋所具有的最小代价和。

【思路】

最小权匹配,先O(n^2)求出每个人到任意房屋的距离后取反,就变成了裸的KM。数据范围很小,O(n^4)可以0ms过。

【错误点】

1.slack在每次循环中药重新设置为无穷大。2.内循环和外循环的循环变量重名了。3.变量名取太乱了用错了一次。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
const int INF=0x7fffffff;
const int MAXN=;
int n,m;
int mx[MAXN],my[MAXN],hx[MAXN],hy[MAXN],numm,numh;
int g[MAXN][MAXN];
int visx[MAXN],visy[MAXN],fx[MAXN],fy[MAXN],slack[MAXN],lk[MAXN]; int Hungary_dfs(int u)
{
visx[u]=;
for (int i=;i<=numm;i++)
{
int wt=fx[u]+fy[i]-g[u][i];
if (!visy[i] && wt==)
{
visy[i]=;
if (lk[i]==- || Hungary_dfs(lk[i]))
{
lk[i]=u;
return ;
}
}
else if (wt<slack[i]) slack[i]=wt;
}
return ;
} int KM()
{
memset(lk,-,sizeof(lk));
for (int i=;i<=numm;i++)
{
fx[i]=-INF;
fy[i]=;
for (int j=;j<=numm;j++) fx[i]=max(fx[i],g[i][j]);
} for (int i=;i<=numm;i++)
{
memset(visx,,sizeof(visx));
memset(visy,,sizeof(visy));
memset(slack,,sizeof(slack));//slack每次都要初始化为无穷大
while (!Hungary_dfs(i))
{
int delta=INF;
for (int j=;j<=numm;j++) if (!visy[j]) delta=min(delta,slack[j]);
for (int j=;j<=numm;j++)//这里忘掉了外面还套了一重循环,重复用了i!
{
if (visx[j])
{
visx[j]=;
fx[j]-=delta;
}
if (visy[j])
{
visy[j]=;
fy[j]+=delta;
}
}
}
} int ret=;
for (int i=;i<=numm;i++) ret+=fx[i]+fy[i];//这里numm写成了n
return ret;
} void init()
{
numm=numh=;
for (int i=;i<n;i++)
{
char c;
getchar();
for (int j=;j<m;j++)
{
scanf("%c",&c);
if (c=='m')
{
mx[++numm]=i;
my[numm]=j;
}
else if (c=='H')
{
hx[++numh]=i;
hy[numh]=j;
}
}
}
for (int i=;i<=numm;i++)
for (int j=;j<=numh;j++)
{
g[i][j]=-*(abs(mx[i]-hx[j])+abs(my[i]-hy[j]));
}
} int main()
{
while (scanf("%d%d",&n,&m))
{
if (n==m && m==) break;
init();
cout<<KM()*(-)<<endl;
}
return ;
}

【KM】POJ2195/HDU1533-Going home的更多相关文章

  1. 【KM】BZOJ1937 [Shoi2004]Mst 最小生成树

    这道题拖了好久因为懒,结果1A了,惊讶∑( 口 || [题目大意] 给定一张n个顶点m条边的有权无向图.现要修改各边边权,使得给出n-1条边是这张图的最小生成树,代价为变化量的绝对值.求最小代价之和. ...

  2. ZOJ-3933-Team Formation【二分图最佳匹配】【KM】

    http://blog.csdn.net/loy_184548/article/details/51154195    一开始对不同组合得不同分数(mm1,mg2,gg3),想用sap来写,但是保证了 ...

  3. HDU 2426 Interesting Housing Problem (最大权完美匹配)【KM】

    <题目链接> 题目大意: 学校里有n个学生和m个公寓房间,每个学生对一些房间有一些打分,如果分数为正,说明学生喜欢这个房间,若为0,对这个房间保持中立,若为负,则不喜欢这个房间.学生不会住 ...

  4. POJ - 2195 Going Home 【KM】

    题目链接 http://poj.org/problem?id=2195 题意 在一张N * M 的地图上 有 K 个人 和 K 个房子 地图上每个点都是认为可行走的 求 将每个人都分配到不同的房子 求 ...

  5. 【转】KM匹配题集

    转自:http://blog.csdn.net/shahdza/article/details/7779324 [HDU]2255 奔小康赚大钱 模板题★1533 Going Home 模板题★242 ...

  6. 【BZOJ4883】[Lydsy2017年5月月赛]棋盘上的守卫 KM算法

    [BZOJ4883][Lydsy2017年5月月赛]棋盘上的守卫 Description 在一个n*m的棋盘上要放置若干个守卫.对于n行来说,每行必须恰好放置一个横向守卫:同理对于m列来说,每列 必须 ...

  7. 【POJ3565】ANTS KM算法

    [POJ3565]ANTS 题意:平面上有2*n个点,N白N黑.为每个白点找一个黑点与之连边,最后所有边不交叉.求一种方案. 题解:KM算法真是一个神奇的算法,虽然感觉KM能做的题用费用流都能做~ 本 ...

  8. 【BZOJ1937】[Shoi2004]Mst 最小生成树 KM算法(线性规划)

    [BZOJ1937][Shoi2004]Mst 最小生成树 Description Input 第一行为N.M,其中 表示顶点的数目, 表示边的数目.顶点的编号为1.2.3.…….N-1.N.接下来的 ...

  9. 【BZOJ3197】[Sdoi2013]assassin 树同构+动态规划+KM

    [BZOJ3197][Sdoi2013]assassin Description Input Output Sample Input 4 1 2 2 3 3 4 0 0 1 1 1 0 0 0 Sam ...

随机推荐

  1. 7月17号day9总结

    今天学习过程和小结 今天学习了如何使用idea操作hdfs. public class HDFSTest {    Configuration configuration;    FileSystem ...

  2. Join/remove server into/from windows domain PS script

    Join server into windows domain PS script $username = "ad-domain\admin" $Password = " ...

  3. TypeConverter使用

    如下代码, <Window.Resources> <local:Human x:Key="human" Name="Tester1" Chil ...

  4. PHP文件操作函数一

    <?php/*Created on 2013-6-26*///判断文件的类型echo filetype("array.php")."<br />&quo ...

  5. jzoj2700 【GDKOI2012模拟02.01】数字

    传送门:https://jzoj.net/senior/#main/show/2700 [题目大意] 令n为正整数,S(n)为n的各位数字之和,令

  6. linux基础之nginx和nfs服务

      第一部分: 一.nginx服务安装nginx包(源码安装)1.先cd /etc/yum.repos.d目录下2.yum install epel-release -y(安装扩展包)3.yum in ...

  7. LeetCode 192:Reverse Bits

    Reverse bits of a given 32 bits unsigned integer. For example, given input 43261596 (represented in ...

  8. [Leetcode Week3]Clone Graph

    Clone Graph题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/clone-graph/description/ Description Clon ...

  9. myeclipse打断点进入后无法查看变量的值的解决方法

    myeclipse打断点进入后无法查看变量的值,打开mycelipse菜单选项:“Window” - “Preferences” - “Java” - “Editor” - “Hovers" ...

  10. Ubunt 服务教程集锦

    1.Ubuntu管理服务安装(强烈推荐最好用Xshell和Xftp): 序号 服务名 介绍 教程地址 windows客户端 1 VNC 可以图形界面管理Ubuntu ubuntu安装vncserver ...