【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 ...
随机推荐
- JavaWeb中session创建与销毁的问题
今天遇到一个奇怪的问题,自己添加了一个session的监听,用来监听在线的人数.但打开浏览器时一直没有走进这个监听中来.最后百度找到了原因: 我们一直存在一个误区,javaweb中的session什么 ...
- CentOS 7 部署nginx
**二进制安装 安装Nginx源 rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el ...
- unixbench安装使用
UnixBench是一个类unix系(Unix,BSD,Linux)统下的性能测试工具,一个开源工具,被广泛用与测试linux系统主机的性能.Unixbench的主要测试项目有:系统调用.读写.进程. ...
- 【SQL】全关系操作
1.消除重复 - DISTINCT SQL语句中默认的是,重复的元祖可以多次的显示.如果希望消除重复,需要DISTINCT关键字. 注:消除重复需要排序,所以代价高.在需要高效率时要谨慎. SELEC ...
- SPOJ-913
Query on a tree II Time Limit: 433MS Memory Limit: 1572864KB 64bit IO Format: %lld & %llu Su ...
- 解决Composer 使用时要求输入授权用户名密码问题
使用Composer下载第三方包时出现: Authentication required (packagist.phpcomposer.com): Username: 解决方法: 1.修改源 comp ...
- yii2.0在model里自定义数据表
无需多言,直接撸代码 class Zhuanjia extends \yii\db\ActiveRecord { public static function tableName() { return ...
- PHP开发经常遇到的几个错误
错误1:foreach循环后留下悬挂指针 在foreach循环中,如果我们需要更改迭代的元素或是为了提高效率,运用引用是一个好办法: $arr = array(1,2,3,4); foreach($a ...
- [orangehrm] 安装问题集合
Web server allows .htaccess files # 这一项检查不通过 解决: In conf/extra/httpd-vhosts.conf, add the line Allow ...
- Codeforces 626 A. Robot Sequence (8VC Venture Cup 2016-Elimination Round)
A. Robot Sequence time limit per test 2 seconds memory limit per test 256 megabytes input standa ...