Poj 2516 Minimum Cost (最小花费最大流)
题目链接:
题目描述:
有n个商店,m个仓储,每个商店和仓库都有k种货物。嘛!现在n个商店要开始向m个仓库发出订单了,订单信息为当前商店对每种货物的需求量。不同的商店从不同的仓库购买不同货物花费不同,问是不是能满足所有商店的要求,如果能商店花费总和最小为多少?
解题思路:
简单的费用流,要跑K次最小花费最大流,每次只对一种货物建图跑费用流。每次建图以0为源点, [1,m]为仓库, [m+1, n+m]为商店, n+m+1为汇点。0与[1,m]连边,边容量为仓库存货,边单位流量的花费为0。
[1,m]与[m+1,n+m]连边,边容量为INF,边单位流量的花费为对应仓库供应i货物给对应商店的单位花费。[m+1,n+m]与汇点连边,边容量为商店需求,边单位流量的花费为0。这个题目建图时候的初始化一定要搞好,不然很容易TLE。
#include <queue>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int maxn = ;
const int INF = 0x3f3f3f3f;
int flow[maxn][maxn], cap[maxn][maxn];
int shop[maxn][maxn], supply[maxn][maxn];
int vis[maxn], pre[maxn], dis[maxn], cost[maxn][maxn];
int c, Flow, s, e; bool spfa ()
{
queue <int> Q;
for (int i=s; i<=e; i++)
{
dis[i] = INF;
vis[i] = ;
}
dis[] = ;
vis[] = ;
Q.push (s);
while (!Q.empty())
{
int u = Q.front();
Q.pop();
vis[u] = ;
for (int v=s; v<=e; v++)
{
if (cap[u][v]>flow[u][v] && dis[v]>dis[u]+cost[u][v])
{
dis[v] = dis[u] + cost[u][v];
pre[v] = u;
if (!vis[v])
{
vis[v] = ;
Q.push(v);
}
}
}
}
if (dis[e] == INF)
return false;
return true;
} void MincostMaxflow ()
{
memset (flow, , sizeof(flow));
c = Flow = ;
while (spfa())
{
int Min = INF;
for (int i=e; i!=s; i=pre[i])
Min = min (Min, cap[pre[i]][i]-flow[pre[i]][i]);
for (int i=e; i!=s; i=pre[i])
{
flow[pre[i]][i] += Min;
flow[i][pre[i]] -= Min;
}
Flow += Min;
c += Min * dis[e];
}
} int main ()
{
int n, m, k;
while (scanf ("%d %d %d", &n, &m, &k), n||m||k)
{
int flag, Cost;
flag = Cost = s = , e = n + m + ; for (int i=; i<=n; i++)
for (int j=; j<=k; j++)
scanf ("%d", &shop[i][j]); for (int i=; i<=m; i++)
for (int j=; j<=k; j++)
scanf ("%d", &supply[i][j]); memset (cap, , sizeof(cap));
memset (cost, , sizeof(cost));
for (int i=; i<=m; i++)
for (int j=m+; j<=n+m; j++)
cap[i][j] = INF; for (int i=; i<=k; i++)
{
int total = ;
for (int j=; j<=n; j++)
for (int l=; l<=m; l++)
{
scanf ("%d", &cost[l][j+m]);
cost[j+m][l] = -cost[l][j+m];
} if (flag)
continue; for (int j=; j<=n; j++)
{
cap[j+m][e] = shop[j][i];
total += shop[j][i];
}
for (int j=; j<=m; j++)
cap[s][j] = supply[j][i]; MincostMaxflow();
if (Flow < total)
flag = ;
Cost += c; }
printf ("%d\n", flag?-:Cost);
}
return ;
}
Poj 2516 Minimum Cost (最小花费最大流)的更多相关文章
- POJ 2516 Minimum Cost [最小费用最大流]
题意略: 思路: 这题比较坑的地方是把每种货物单独建图分开算就ok了. #include<stdio.h> #include<queue> #define MAXN 500 # ...
- POJ 2516 Minimum Cost (最小费用最大流)
POJ 2516 Minimum Cost 链接:http://poj.org/problem?id=2516 题意:有M个仓库.N个商人.K种物品.先输入N,M.K.然后输入N行K个数,每一行代表一 ...
- POJ 2516 Minimum Cost (网络流,最小费用流)
POJ 2516 Minimum Cost (网络流,最小费用流) Description Dearboy, a goods victualer, now comes to a big problem ...
- POJ - 2516 Minimum Cost(最小费用最大流)
1.K种物品,M个供应商,N个收购商.每种物品从一个供应商运送到一个收购商有一个单位运费.每个收购商都需要K种物品中的若干.求满足所有收购商需求的前提下的最小运费. 2.K种物品拆开来,分别对每种物品 ...
- POJ - 2516 Minimum Cost 每次要跑K次费用流
传送门:poj.org/problem?id=2516 题意: 有m个仓库,n个买家,k个商品,每个仓库运送不同商品到不同买家的路费是不同的.问为了满足不同买家的订单的最小的花费. 思路: 设立一个源 ...
- POJ 2516 Minimum Cost (费用流)
题面 Dearboy, a goods victualer, now comes to a big problem, and he needs your help. In his sale area ...
- POJ2516:Minimum Cost(最小费用最大流)
Minimum Cost Time Limit: 4000MS Memory Limit: 65536K Total Submissions: 19088 Accepted: 6740 题目链 ...
- POJ 2516 Minimum Cost(拆点+KM完备匹配)
题目链接:http://poj.org/problem?id=2516 题目大意: 第一行是N,M,K 接下来N行:第i行有K个数字表示第i个卖场对K种商品的需求情况 接下来M行:第j行有K个数字表示 ...
- POJ 2516 Minimum Cost(最小费用流)
Description Dearboy, a goods victualer, now comes to a big problem, and he needs your help. In his s ...
随机推荐
- HTML大文件上传(博客迁移)
Html大文件上传:跳转 通过github和hexo进行搭建博客,主要是在没有网络的时候,可以本地访问,并支持markdown语法. 新博客地址:跳转
- storm的例子,一个非常好的网址
https://insight.io/github.com/apache/storm/tree/HEAD/examples/storm-elasticsearch-examples/src/main/ ...
- HDU OJ Max sum 题目1003
#include <iostream> #include<stdio.h> #include<stdlib.h> using namespace std; i ...
- 【Mongodb教程 第九课 】MongoDB 删除文档
remove() 方法 MongoDB的 remove() 方法用于从集合中删除文档.remove() 方法接受两个参数.第一个是删除criteria ,第二是justOne标志: deletion ...
- 如约而至,Java 10 正式发布! Spring+SpringMVC+MyBatis+easyUI整合进阶篇(十四)Redis缓存正确的使用姿势 努力的孩子运气不会太差,跌宕的人生定当更加精彩 优先队列详解(转载)
如约而至,Java 10 正式发布! 3 月 20 日,Oracle 宣布 Java 10 正式发布. 官方已提供下载:http://www.oracle.com/technetwork/java ...
- Cts框架解析(6)-任务的运行
前两篇讲了任务的加入和9大项配置,这篇讲任务的运行. 任务的运行 任务的运行在CommandScheduler的run方法中,所以删除全部的断点,在run方法中打上断点,重新启动启动debug: 先看 ...
- vmware10上安装mac os 10.9
来源地址:http://dtbuluo.com/blog/archives/350 序言: 前几天跟朋友开玩笑说,要不我们一起来学习一下swift编程语言吧~我们就抱着玩玩的态度,没有想过要做出什么优 ...
- ASP.NET MVC 原理
我出了份卷子做面试题,其中之一就是要求说说ASP.NET MVC的原理.感觉太空泛了,谁能说得准呢? 但是,如果站在我这个面试官立场,面试题好多时并不要求有标准答案,可能也没有什么标准答案,主要是通过 ...
- 相关性系数缺点与证明 k阶矩
相关性系数 https://baike.baidu.com/item/相关系数/3109424?fr=aladdin 缺点 需要指出的是,相关系数有一个明显的缺点,即它接近于1的程度与数据组数n相关, ...
- 有关MAC、PHY和MII
这是一篇转载,原文链接:http://www.cppblog.com/totti1006/archive/2008/04/22/47829.html 以太网(Ethernet)是一种计算机局域网组网技 ...