费用流模板(带权二分图匹配)——hdu1533
/*
带权二分图匹配
用费用流求,增加源点s 和 汇点t
*/
#include<bits/stdc++.h>
using namespace std;
#define maxn 10005
#define maxm 200005
struct Edge{int to,nxt,w,c;}e[maxm<<];
int head[maxn],tot,n,m,s,t,ans,maxflow;
char mp[maxn][maxn];
vector<pair<int,int> >M,H;
void add(int u,int v,int w,int c){
e[tot].to=v;e[tot].w=w;e[tot].c=c;e[tot].nxt=head[u];head[u]=tot++;
e[tot].to=u;e[tot].w=;e[tot].c=-c;e[tot].nxt=head[v];head[v]=tot++;
} int d[maxn],v[maxn],incf[maxn],pre[maxn];
bool spfa(){
queue<int>q;
memset(d,0x3f,sizeof d);
memset(v,,sizeof v);
q.push(s);d[s]=;v[s]=;
incf[s]=<<;
while(q.size()){
int x=q.front();q.pop();v[x]=;
for(int i=head[x];i!=-;i=e[i].nxt){
int y=e[i].to;
if(e[i].w==)continue;
if(d[y]>d[x]+e[i].c){
d[y]=d[x]+e[i].c;
incf[y]=min(incf[x],e[i].w);
pre[y]=i;
if(!v[y])v[y]=,q.push(y);
}
}
}
if(d[t]==0x3f3f3f3f)return false;
return true;
}
void update(){
int x=t;
while(x!=s){
int i=pre[x];
e[i].w-=incf[t];
e[i^].w+=incf[t];
x=e[i^].to;
}
maxflow+=incf[t];
ans+=d[t]*incf[t];
} void init(){
memset(head,-,sizeof head);
tot=ans=maxflow=;
M.clear();H.clear();
}
int dis(pair<int,int> a,pair<int,int> b){
return abs(a.first-b.first)+abs(a.second-b.second);
} int main(){
while(cin>>n>>m&&n){
init();
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
scanf("\n%c",&mp[i][j]);
if(mp[i][j]=='m')
M.push_back(make_pair(i,j));
if(mp[i][j]=='H')
H.push_back(make_pair(i,j));
}
s=,t=*M.size()+;
for(int i=;i<M.size();i++)
add(s,i+,,);
for(int i=;i<H.size();i++)
add(i++M.size(),t,,);
for(int i=;i<M.size();i++)
for(int j=;j<H.size();j++)
add(i+,j++M.size(),,dis(M[i],H[j]));
while(spfa())
update();
cout<<ans<<'\n';
}
}
费用流模板(带权二分图匹配)——hdu1533的更多相关文章
- [NOI2012]美食节——费用流(带权二分图匹配)+动态加边
题目描述 小M发现,美食节共有n种不同的菜品.每次点餐,每个同学可以选择其中的一个菜品.总共有m个厨师来制作这些菜品.当所有的同学点餐结束后,菜品的制作任务就会分配给每个厨师.然后每个厨师就会同时开始 ...
- 运动员最佳匹配问题 KM算法:带权二分图匹配
题面: 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的男运动员竞赛优势:Q[i][j]是女运动员i和男运动员j配合的女运动员竞赛优势. ...
- POJ 2195 Going Home (带权二分图匹配)
POJ 2195 Going Home (带权二分图匹配) Description On a grid map there are n little men and n houses. In each ...
- POJ 2195 Going Home | 带权二分图匹配
给个地图有人和房子 保证人==房子,每个人移动到房子处需要花费曼哈顿距离的代价 问让人都住在房子里最小代价 显然是个带权二分图最大匹配 转化成以一个网络,规定w是容量,c是代价 1.S向人连边,w=1 ...
- hdu5045:带权二分图匹配
题目大意 : n个人 做m道题,其中 每连续的n道必须由不同的人做 已知第i人做出第j题的概率为pij,求最大期望 思路:考虑每连续的n道题 都要n个人来做,显然想到了带权的二分图匹配 然后就是套模板 ...
- Glorious Brilliance (最短路 + 带权二分图匹配)
这是一道代码大题.一开始读错题意了,然后理解成直接看上去的那种相邻,然后想不通好久!!! 把不同联通的图分离出来,然后先预处理一下形成之后的相邻图的状态,然后根据01确定哪一些是需要更换状态的,然后建 ...
- [HAOI2008]移动玩具(状压&带权二分图)
题目描述 • 一个 4 × 4 的 0/1 矩阵 • 每次可以交换相邻两个元素 • 求从初始状态到目标状态的最小交换次数 输入格式 前四行,每行一个长为 4 的 0/1 字符串,描述初始状态. 后四行 ...
- KM(Kuhn-Munkres)算法求带权二分图的最佳匹配
KM(Kuhn-Munkres)算法求带权二分图的最佳匹配 相关概念 这个算法个人觉得一开始时有点难以理解它的一些概念,特别是新定义出来的,因为不知道是干嘛用的.但是,在了解了算法的执行过程和原理后, ...
- Luogu 1559 运动员最佳匹配问题(带权二分图最大匹配)
Luogu 1559 运动员最佳匹配问题(带权二分图最大匹配) Description 羽毛球队有男女运动员各n人.给定2 个n×n矩阵P和Q.P[i][j]是男运动员i和女运动员j配对组成混合双打的 ...
随机推荐
- Object相关方法
const object1 = { a: 'somestring', b: 42, c: false }; console.log(Object.values(object1)); // expect ...
- uuencode - 对二进制文件编码
总览 (SYNOPSIS) uuencode [-m] [ file ] name uudecode [-o outfile] [ file ]... 描述 (DESCRIPTION) Uuencod ...
- Shell case in语句详解
和其它编程语言类似,Shell 也支持两种分支结构(选择结构),分别是 if else 语句和 case in 语句.在<Shell if else>一节中我们讲解了 if else 语句 ...
- 【JZOJ6419】模拟旅行&【BZOJ5506】【luoguP5304】旅行者
description 某国有n座城市,这些城市之间通过m条单向道路相连,已知每条道路的长度. 不过,小X只对其中k座城市感兴趣. 为了更好地规划模拟旅行路线,提升模拟旅行的体验,小X想要知道他感兴趣 ...
- alert样式优化
//alert样式优化 function alert(msg, mode) { //mode为空,即只有一个确认按钮,mode为1时有确认和取消两个按钮 msg = msg || ''; mode = ...
- hive中的lateral view 与 explode函数的使用
hive中的lateral view 与 explode函数的使用 背景介绍: explode与lateral view在关系型数据库中本身是不该出现的. 因为他的出现本身就是在操作不满足第一范式的数 ...
- dcoker安装redis
一.安装 搜索镜像 #docker search redis 拉取镜像 #docker pull redis 创建redis容器 #docker run -d --name redis --resta ...
- 嘶吼CTF2019总结(Web部分题目复现以及部分杂项)
easy calc 这次的比赛自己一题都没有做出来,赛后看题解的时候很难受,其实有很多东西自己其实是可以做出来的,但是思路被限制了,可能这就是菜吧. 首先web题目就是一个easy calc,emmm ...
- nagios监控实用教程
nagios监控实用教程 Nagios作为开源网络监视工具,它不但可以有效的监控内存.流量.数据库使用情况.它还可以Windows.Linux主机状态.本专题收录了有关Nagios监控相关文章,供大家 ...
- JAVA IntelliJ IDEA for mac/jdk的安装及环境配置、运行
现在配置完之后再回头看看,其实挺简单, 但我还是弄了好几个小时才配置出来, 不过好在是自己配置出来的, 每天都在慢慢进步. 安装及配置步骤如下: JAVA的IDE的话去jetbrains的官网上对应下 ...