题目链接:

  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 (最小花费最大流)的更多相关文章

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

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

  2. POJ 2516 Minimum Cost (最小费用最大流)

    POJ 2516 Minimum Cost 链接:http://poj.org/problem?id=2516 题意:有M个仓库.N个商人.K种物品.先输入N,M.K.然后输入N行K个数,每一行代表一 ...

  3. POJ 2516 Minimum Cost (网络流,最小费用流)

    POJ 2516 Minimum Cost (网络流,最小费用流) Description Dearboy, a goods victualer, now comes to a big problem ...

  4. POJ - 2516 Minimum Cost(最小费用最大流)

    1.K种物品,M个供应商,N个收购商.每种物品从一个供应商运送到一个收购商有一个单位运费.每个收购商都需要K种物品中的若干.求满足所有收购商需求的前提下的最小运费. 2.K种物品拆开来,分别对每种物品 ...

  5. POJ - 2516 Minimum Cost 每次要跑K次费用流

    传送门:poj.org/problem?id=2516 题意: 有m个仓库,n个买家,k个商品,每个仓库运送不同商品到不同买家的路费是不同的.问为了满足不同买家的订单的最小的花费. 思路: 设立一个源 ...

  6. POJ 2516 Minimum Cost (费用流)

    题面 Dearboy, a goods victualer, now comes to a big problem, and he needs your help. In his sale area ...

  7. POJ2516:Minimum Cost(最小费用最大流)

    Minimum Cost Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 19088   Accepted: 6740 题目链 ...

  8. POJ 2516 Minimum Cost(拆点+KM完备匹配)

    题目链接:http://poj.org/problem?id=2516 题目大意: 第一行是N,M,K 接下来N行:第i行有K个数字表示第i个卖场对K种商品的需求情况 接下来M行:第j行有K个数字表示 ...

  9. POJ 2516 Minimum Cost(最小费用流)

    Description Dearboy, a goods victualer, now comes to a big problem, and he needs your help. In his s ...

随机推荐

  1. win10 powershell 验证下载的包的MD5/sha1的签名值

    巧用Win10自带的PowerShell命令校验文件的Hash值(MD5.SHA1/256等) 发表于2017年3月8日由MS酋长 通常为了保证我们从网上下载的文件的完整性和可靠性,我们把文件下载下来 ...

  2. Android c/c++ 应用向linux 平台迁移执行

    鉴于近期在minicamera (linux + FPGA) 平台上模拟 安卓系统camera流程遭遇不断升级同步的困扰.尤其是 不开放源代码后 , 应用要链接封闭动态库造成的困难.以及在sprdis ...

  3. Material UI:很强大的CSS框架

    Material UI 是一款功能很强大,界面却十分清新简洁的CSS框架.Material UI利用了Google的Material Design 全新设计语言.而且让每个UI组件都变得很独立.因此开 ...

  4. 【.NET Core项目实战-统一认证平台】基于jackcao博客使用VSCode开发及感悟One搭建开发环境

    原博客系列文章链接:https://www.cnblogs.com/jackcao/ 金焰的世界 感谢博主无私的奉献,感谢博主幼儿班的教学 基于jackcao博客使用VsCode开发及感悟One搭建开 ...

  5. Linux下怎么添加和查看PATH环境变量

    linux下查看和添加PATH环境变量来自:http://apps.hi.baidu.com/share/detail/32942984 $PATH:决定了shell将到哪些目录中寻找命令或程序,PA ...

  6. 我们工作到底为了什么 (HP大中华区总裁孙振耀退休感言)

    我们工作到底为了什么 (HP大中华区总裁孙振耀退休感言) 一.关于工作与生活    我有个有趣的观察,外企公司多的是25-35岁的白领,40岁以上的员工很少,二三十岁的外企员工是意气风发的,但外企公司 ...

  7. 嵌入式开发之davinci---dm8168VPORT口管脚总结

    http://blog.csdn.net/shanghaiqianlun/article/details/7531365

  8. javaScript查找HTML元素

    1.通过id查找 例:查找id="intro"元素 var x=document.getElementById("intro"); 2.通过标签名查找 例:查找 ...

  9. java垃圾回收机制的使用

    public class Test { public static void main(String[] args) throws Exception { Book b=new Book(true); ...

  10. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX【转】

    本文转载自:http://www.cnblogs.com/52php/p/5681751.html 四.更好一点的Hello World 没有最好,只有更好 从本小节开始,后面所有的构建我们都将采用  ...