【KM】POJ2195/HDU1533-Going home
//最近没什么时间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的更多相关文章
- 【KM】BZOJ1937 [Shoi2004]Mst 最小生成树
这道题拖了好久因为懒,结果1A了,惊讶∑( 口 || [题目大意] 给定一张n个顶点m条边的有权无向图.现要修改各边边权,使得给出n-1条边是这张图的最小生成树,代价为变化量的绝对值.求最小代价之和. ...
- ZOJ-3933-Team Formation【二分图最佳匹配】【KM】
http://blog.csdn.net/loy_184548/article/details/51154195 一开始对不同组合得不同分数(mm1,mg2,gg3),想用sap来写,但是保证了 ...
- HDU 2426 Interesting Housing Problem (最大权完美匹配)【KM】
<题目链接> 题目大意: 学校里有n个学生和m个公寓房间,每个学生对一些房间有一些打分,如果分数为正,说明学生喜欢这个房间,若为0,对这个房间保持中立,若为负,则不喜欢这个房间.学生不会住 ...
- POJ - 2195 Going Home 【KM】
题目链接 http://poj.org/problem?id=2195 题意 在一张N * M 的地图上 有 K 个人 和 K 个房子 地图上每个点都是认为可行走的 求 将每个人都分配到不同的房子 求 ...
- 【转】KM匹配题集
转自:http://blog.csdn.net/shahdza/article/details/7779324 [HDU]2255 奔小康赚大钱 模板题★1533 Going Home 模板题★242 ...
- 【BZOJ4883】[Lydsy2017年5月月赛]棋盘上的守卫 KM算法
[BZOJ4883][Lydsy2017年5月月赛]棋盘上的守卫 Description 在一个n*m的棋盘上要放置若干个守卫.对于n行来说,每行必须恰好放置一个横向守卫:同理对于m列来说,每列 必须 ...
- 【POJ3565】ANTS KM算法
[POJ3565]ANTS 题意:平面上有2*n个点,N白N黑.为每个白点找一个黑点与之连边,最后所有边不交叉.求一种方案. 题解:KM算法真是一个神奇的算法,虽然感觉KM能做的题用费用流都能做~ 本 ...
- 【BZOJ1937】[Shoi2004]Mst 最小生成树 KM算法(线性规划)
[BZOJ1937][Shoi2004]Mst 最小生成树 Description Input 第一行为N.M,其中 表示顶点的数目, 表示边的数目.顶点的编号为1.2.3.…….N-1.N.接下来的 ...
- 【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 ...
随机推荐
- ZOJ3261:Connections in Galaxy War(逆向并查集)
Connections in Galaxy War Time Limit: 3 Seconds Memory Limit: 32768 KB 题目链接:http://acm.zju.edu. ...
- js实现2048小游戏
这是学完javascript基础,编写的入门级web小游戏 游戏规则:在玩法规则也非常的简单,一开始方格内会出现2或者4等这两个小数字,玩家只需要上下左右其中一个方向来移动出现的数字,所有的数字就会想 ...
- 正则表达式 re模块 collections模块
根据手机号码一共11位并且是只以13.14.15.18开头的数字这些特点,我们用python写了如下代码: while True: phone_number = input('please input ...
- Linux驱动 读写文件【转】
转自:http://blog.csdn.net/h_armony/article/details/7546624 在VFS的支持下,用户态进程读写任何类型的文件系统都可以使用read和write着两个 ...
- ARM 处理器架构【转】
ARM 处理器架构 转自:http://www.arm.com/zh/products/processors/instruction-set-architectures/index.php ARM 架 ...
- windows中Appium-desktop配合夜神模拟器的使用
1.安装Android SDK并配好环境 ANDROID_HOME :C:\Users\18810\AppData\Local\Android\Sdk path:%ANDROID_HOME%\plat ...
- win7中下载和安装redis
下载地址:https://github.com/MicrosoftArchive/redis/releases 这里我下载的是3.2.100版本,下载zip,然后解压.解压后如图所示: 开启redis ...
- ggplot2绘制多图
参考链接:http://www.cnblogs.com/nxld/p/6065237.html ggplot2.multiplot是一个易于使用的功能,将多个图形在同一页面上使用R统计软件和GGPLO ...
- Spring+Junit,测试事务时,一直回滚
研究了好长时间,都不知道原因,也不能解决. 控制台又没有报异常,但是就是一直回滚.注释掉spring声明式配置的代码,就能正确的更新数据. 从网上看了,别人的文章 http://blog.csdn.n ...
- 【 Zabbix 】 — 基础安装
一.基础环境 (1)centos6.7 x64 (2)JDK1.8 and zabbix-2.4.8(JDK是为了后期可以监控tomcat) (3)虚拟机测试环境 二.安装LAMP环境 这里为了快速搭 ...