HDU 1533 二分图最小权匹配 Going Home
带权二分图匹配,把距离当做权值,因为是最小匹配,所以把距离的相反数当做权值求最大匹配。
最后再把答案取一下反即可。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <vector>
#include <cmath>
#define MP make_pair
using namespace std; typedef pair<int, int> PII; const int maxn = + ; int n;
PII house[maxn], men[maxn];
char grid[maxn][maxn]; int row, col; int dist(const PII& a, const PII& b)
{ return abs(a.first - b.first) + abs(a.second - b.second); } //KM algorithm
int W[maxn][maxn];
int Lx[maxn], Ly[maxn];
int lft[maxn];
bool S[maxn], T[maxn]; bool match(int u)
{
S[u] = true;
for(int v = ; v <= n; v++)
if(Lx[u] + Ly[v] == W[u][v] && !T[v])
{
T[v] = true;
if(!lft[v] || match(lft[v]))
{
lft[v] = u;
return true;
}
}
return false;
} void update()
{
int a = ;
for(int u = ; u <= n; u++) if(S[u])
for(int v = ; v <= n; v++) if(!T[v])
a = min(a, Lx[u] + Ly[v] - W[u][v]);
for(int u = ; u <= n; u++)
{
if(S[u]) Lx[u] -= a;
if(T[u]) Ly[u] += a;
}
} void KM()
{
for(int i = ; i <= n; i++)
{
Lx[i] = *max_element(W[i]+, W[i]++n);
Ly[i] = ;
lft[i] = ;
}
for(int u = ; u <= n; u++)
{
for(;;)
{
memset(S, false, sizeof(S));
memset(T, false, sizeof(T));
if(match(u)) break;
else update();
}
}
} int main()
{
while(scanf("%d%d", &row, &col) == && row)
{
n = ; for(int i = ; i < row; i++) scanf("%s", grid[i]);
int hcnt = , mcnt = ;
for(int i = ; i < row; i++)
for(int j = ; j < col; j++)
{
if(grid[i][j] == 'H')
house[++hcnt] = MP(i, j);
else if(grid[i][j] == 'm')
men[++mcnt] = MP(i, j);
} //build graph
n = hcnt;
for(int i = ; i <= n; i++)
for(int j = ; j <= n; j++)
W[i][j] = -dist(men[i], house[j]); KM(); int ans = ;
for(int i = ; i <= n; i++) ans += W[lft[i]][i];
printf("%d\n", -ans);
} return ;
}
代码君
HDU 1533 二分图最小权匹配 Going Home的更多相关文章
- HDU(1853),最小权匹配,KM
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1853 Cyclic Tour Time Limit: 1000/1000 MS (Java/Other ...
- HDU 1533:Going Home(KM算法求二分图最小权匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=1533 Going Home Problem Description On a grid map there ...
- [ACM] POJ 3686 The Windy's (二分图最小权匹配,KM算法,特殊建图)
The Windy's Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4158 Accepted: 1777 Descr ...
- [ACM] HDU 1533 Going Home (二分图最小权匹配,KM算法)
Going Home Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- UVa 1349 (二分图最小权完美匹配) Optimal Bus Route Design
题意: 给出一个有向带权图,找到若干个圈,使得每个点恰好属于一个圈.而且这些圈所有边的权值之和最小. 分析: 每个点恰好属于一个有向圈 就等价于 每个点都有唯一后继. 所以把每个点i拆成两个点,Xi ...
- UVA 1349 Optimal Bus Route Design (二分图最小权完美匹配)
恰好属于一个圈,那等价与每个点有唯一的前驱和后继,这让人想到了二分图, 把一个点拆开,点的前驱作为S集和点的后继作为T集,然后连边,跑二分图最小权完美匹配. 写的费用流..最大权完美匹配KM算法没看懂 ...
- 紫书 例题11-10 UVa 1349 (二分图最小权完美匹配)
二分图网络流做法 (1)最大基数匹配.源点到每一个X节点连一条容量为1的弧, 每一个Y节点连一条容量为1的弧, 然后每条有向 边连一条弧, 容量为1, 然后跑一遍最大流即可, 最大流即是最大匹配对数 ...
- hdu 2255 二分图最大权匹配 *
题意:说在遥远的地方有一个非常富裕的村落,有一天,村长决定进行制度改革:重新分配房子.这可是一件大事,关系到人民的住房问题啊.村里共有n间房间,刚好有n家老百姓,考虑到每家都要有房住(如果有老百姓没房 ...
- UVALIVE 4970 最小权匹配
首先贴一下这道题的BNU地址,UVA地址自己找吧. http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=11852 题意:这道题的意思就是,给你N个棋子的 ...
随机推荐
- Bootcamp Win10蓝牙鼠标的问题
运行services.msc找到Bluetooth support service 把启动类型从手动改为自动 重新连接蓝牙鼠标
- 【extjs6学习笔记】Mastering Ext JS, 2nd Edition
我不知道在别人看来,我是什么样的人:但在我自己看来,我不过就象是一个在海滨玩耍的小孩,为不时发现比寻常更为光滑的一块卵石或比寻常更为美丽的一片贝壳而沾沾自喜,而对于展现在我面前的浩瀚的真理的海洋,却全 ...
- npm相关命令
npm install npm install log4js npm list npm list log4js #查看模板安装版本 npm install log4js@1.0.1 #指定模块版本安装 ...
- GIT SSH免登录密码实现更新(git pull)、推送(git push)操作
一.使用场景 现在有两台服务器A和B,在A服务器上搭建有git版本代码仓库,现要实现B服务器SSH免密码登录A服务器,并能够从A服务器拉取.推送代码! 二.操作步骤 1.在B服务器项目根目录下执行以 ...
- 数据库迁移后报错提示MySQL Error:Can''t find file errno: 13 - Permission denied的解决方法
用户MYSQL数据库迁移后,遇到报错MySQL Error:Can't find file (errno: 13 - Permission denied)使用以下指令重新设置所有者和权限,依然不能解决 ...
- jsp另外五大内置对象之out输出
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...
- HDU 5501 The Highest Mark (贪心+DP,经典)
题意: 有n道题目,每道题目的初始分数为Ai,分数每分钟减少Bi,完成此题需要Ci分钟,问在t分钟内最多能获得多少分? 思路: 好题~ 如果没有B的话,就是一道裸的01背包的题目了.每道题目的得分为: ...
- Kippo-Failed to load application: 'module' object has no attribute 'IPluggableAuthenticationModules'
Kippo-Failed to load application: 'module' object has no attribute 'IPluggableAuthenticationModules' ...
- PSNR
PSNR,峰值信噪比,通常用来评价一幅图像压缩后和原图像相比质量的好坏,当然,压缩后图像一定会比原图像质量差的,所以就用这样一个评价指标来规定标准了.PSNR越高,压缩后失真越小.这里主要定义了两个值 ...
- CPP-网络/通信:用CMarkup类操纵XML
首先到http://www.firstobject.com/下载CMarkup教学版,解压后里面是一个DEMO,将Markup.h .cpp拷贝并添加到工程中,第一次编译可能会出现预编译错误,解决 ...