题目:http://poj.org/problem?id=2195

有若干个人和若干个房子在一个给定网格中,每人走一个都要一定花费,每个房子只能容纳一人,现要求让所有人进入房子,且总花费最小。

构造一个超级源s和超级汇t,超级源s与U中所有点相连,费用cost[s][u]=0(这是显然的),容量cap[s][u]=1;V中所有点与超级汇t相连,

费用cost[v][t]=0(这是显然的),容量cap[t][v]=1。

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#include <cmath>
using namespace std;
const int INF=<<;
const int maxn=;
struct node
{
int x,y;
}p[maxn],h[maxn];
int c[maxn][maxn],f[maxn][maxn],w[maxn][maxn];
int n,m,pn,hn,s,t,ans;
bool inq[maxn]; //是否在队列中
char str[maxn][maxn];
int pre[maxn],dis[maxn];//上一条弧,Bellman_ford; void spfa()
{
int i,v;
queue<int>q;
for (i = ; i < maxn; i++)
{
dis[i] = INF;
pre[i] = -;
inq[i] = false;
}
q.push(s);
inq[s] = true;
dis[s] = ;
while (!q.empty())
{
int u = q.front();
q.pop();
inq[u] = false;
for (v = ; v <= t; v++)
{
if (c[u][v]&& dis[v] > dis[u] + w[u][v])
{
dis[v] = dis[u] + w[u][v];
pre[v] = u;
if (!inq[v])
{
q.push(v);
inq[v] = true;
}
}
}
}
}
void mcmf()
{
while ()
{
spfa();
if (pre[t] == -) break;
int x = t,minf = INF;
while (pre[x] != -)
{
minf = min(minf,c[pre[x]][x]);
x = pre[x];
}
x = t;
while (pre[x] != -)
{
c[pre[x]][x]-=minf;
c[x][pre[x]]+=minf;
ans+=minf*w[pre[x]][x];
x = pre[x];
}
}
} int main()
{
int i,j,pn,hn;
while(cin>>n>>m && n || m)
{
pn = hn = ;
memset(c,,sizeof(c));
memset(f,,sizeof(f));
memset(w,,sizeof(w));
for(i = ; i < n; i++)
{
scanf("%s",str[i]);
for(j = ; j < m; j++)
{
if(str[i][j] == 'H')
{
h[++hn].x = i;
h[hn].y = j;
}
else if(str[i][j] == 'm')
{
p[++pn].x = i;
p[pn].y = j;
}
}
}
s = ;
t = pn + hn + ;
for (i = ; i <= pn; i++)
c[s][i] = ;
for (i = ; i <= hn; i++)
c[i + pn][t] = ;
for (i = ; i <= pn; i++)
{
for (j = ; j <= hn; j++)
{
c[i][j + pn] = ;
w[i][j + pn] = abs(p[i].x - h[j].x) + abs(p[i].y - h[j].y);
w[j + pn][i] = -w[i][j + pn];
} }
ans = ;
mcmf();
printf("%d\n",ans);
}
return ;
}

poj 2195 Going Home(最小费用最大流)的更多相关文章

  1. POJ 2195 - Going Home - [最小费用最大流][MCMF模板]

    题目链接:http://poj.org/problem?id=2195 Time Limit: 1000MS Memory Limit: 65536K Description On a grid ma ...

  2. POJ 2195 Going Home 最小费用最大流 尼玛,心累

    D - Going Home Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Subm ...

  3. poj 2351 Farm Tour (最小费用最大流)

    Farm Tour Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17230   Accepted: 6647 Descri ...

  4. POJ 2157 Evacuation Plan [最小费用最大流][消圈算法]

    ---恢复内容开始--- 题意略. 这题在poj直接求最小费用会超时,但是题意也没说要求最优解. 根据线圈定理,如果一个跑完最费用流的残余网络中存在负权环,那么顺着这个负权环跑流量为1那么会得到更小的 ...

  5. poj 2135 Farm Tour 最小费用最大流建图跑最短路

    题目链接 题意:无向图有N(N <= 1000)个节点,M(M <= 10000)条边:从节点1走到节点N再从N走回来,图中不能走同一条边,且图中可能出现重边,问最短距离之和为多少? 思路 ...

  6. POJ 3680: Intervals【最小费用最大流】

    题目大意:你有N个开区间,每个区间有个重量wi,你要选择一些区间,使得满足:每个点被不超过K个区间覆盖的前提下,重量最大 思路:感觉是很好想的费用流,把每个区间首尾相连,费用为该区间的重量的相反数(由 ...

  7. POJ 2135 Farm Tour [最小费用最大流]

    题意: 有n个点和m条边,让你从1出发到n再从n回到1,不要求所有点都要经过,但是每条边只能走一次.边是无向边. 问最短的行走距离多少. 一开始看这题还没搞费用流,后来搞了搞再回来看,想了想建图不是很 ...

  8. [poj] 1235 Farm Tour || 最小费用最大流

    原题 费用流板子题. 费用流与最大流的区别就是把bfs改为spfa,dfs时把按deep搜索改成按最短路搜索即可 #include<cstdio> #include<queue> ...

  9. POJ 2516 Minimum Cost [最小费用最大流]

    题意略: 思路: 这题比较坑的地方是把每种货物单独建图分开算就ok了. #include<stdio.h> #include<queue> #define MAXN 500 # ...

随机推荐

  1. [SQL Server]树形结构的创建

    对于SQL Server来说,构建显示一个树形结构不是一件容易的事情,逻辑构造能力不是它的强项.不过也不是说它没有能力干这个事情,只要换一种思维方式就可以理解它的工作原理. 例如,现在有一张表的内容如 ...

  2. 用PHP生成随机数的函数

    转自:http://www.jbxue.com/article/5034.html 介绍:在早期的php中生成一个随机字符串时,总是先创建一个字符池,然后用一个循环和mt_rand()或rand()生 ...

  3. 记一个JAVA关于日期的坑

    JAVA解析日期格式代码,之前一直写成:“yyyy-MM-dd hh:mm”,比如"2016-01-18 11:00"."2016-01-18 15:00"都可 ...

  4. SIM900A访问HTTP的简单方法

    最近做项目,使用Arduino控制设备,读取数据,然后通过移动网络传送到服务器. 我选用的是正点原子的SIM900A模块.在服务器部署了一个监听程序,Arduino控制SIM900A通过TCP方式把数 ...

  5. 拥抱ARM妹子 序章!ARM妹子~~ 哥我来啦!

    一个负心汉即将移情别恋,从51转到ARM妹子啦?其实8是的,俺准备开后宫.哇——咔~咔~~.考虑功耗和成本等问题,只有51肯定是不够的,所以嘛~~(一脸坏笑)嘿嘿~~,ARM妹子俺追定了.出于对ARM ...

  6. SQL*Loader使用详解(一)

    1.SQL*Loader介绍 1)SQL*Loader是一个从外部文件指加载数据到Oracle数据库的工具.语法类似于DB2的Load语法,但SQL*Loader支持各种load格式.选择性load和 ...

  7. 【 Quartz】使用 JobListener (任务监听器可实现) 我想在一个任务执行后在执行第二个任务怎么办呢

    http://liuzidong.iteye.com/blog/1147528 Quartz之JobExecutionException 博客分类: Java Quartz quartzjobexec ...

  8. 【BZOJ 2440】[中山市选2011]完全平方数

    Description 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数.然而这丝毫不影响他对其他数的热爱. 这天是 ...

  9. jquery全局加载函数的几种方式;

    1.使用javascript方式(function(){})(); 2.使用jQuery(function($) {}); 3.使用$(document).ready(function(){}); 其 ...

  10. 如果Android和C#在一起?

    先看两则新闻.   一则来自新浪科技:   谷歌上诉遭拒绝 需向甲骨文支付Java使用费 大意是说,针对谷歌Android操作系统侵犯甲骨文Java知识产权的指控,美国法院最近做出了有利于甲骨文的裁决 ...