题目链接:

  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. tomcat的安装和使用

    1.下载最新的tomcat:https://tomcat.apache.org/download-90.cgi 最新版本9.0.2属于beta版本,就没有必要尝鲜踩坑了 使用8.5.24的稳定版本的二 ...

  2. 百亿级企业级 RPC 框架开源了!

    今天给大家介绍给一款性能卓越的 RPC 开源框架,其作者就是我推荐每个 Java 程序员都应该看的<Java 生态核心知识点整理>的原作者张玉龙. 说实话我第一次看到这个资料的时候,就感觉 ...

  3. [scrapy]实例:爬取jobbole页面

    工程概览: 创建工程 scrapy startproject ArticleSpider 创建spider cd /ArticleSpider/spiders/ 新建jobbole.py # -*- ...

  4. UI 07 _ 导航视图控制器 与 属性传值

    首先, 先创建三个VC. 完毕点击按钮, 进入下一页, 并可以返回. 要先把导航视图控制器创建出来. 在AppDelegate.m 文件里代码例如以下: #import "AppDelega ...

  5. easyUI 验证控件应用、自己定义、扩展验证 手机号码或电话话码格式

    easyUI 验证控件应用.自己定义.扩展验证 手机号码或电话话码格式 在API中   发现给的demo 中没有这个验证,所以就研究了下. 相关介绍省略,直接上代码吧! watermark/2/tex ...

  6. linux定时访问url

    cd /root touch test.sh #创建文件 vim test.sh #!/bin/sh URL="url地址" curl $URL 保存 退出 #修改文件属性,使其可 ...

  7. Pierce振荡器设计

    一.Pierce振荡器电路 Inv:内部反相器,作用等同于放大器: Q:石英晶体或陶瓷晶振: RF:内部反馈电阻(使反相器工作在线性区): RExt:外部限流电阻(防止石英晶体被过分驱动): CL1. ...

  8. web 界面设计---大道至简

    http://www.cnblogs.com/coder2012/p/4023442.html 一个非常精简的webpy页面博客 qing.weibo.com 新浪的轻微博也不错精简

  9. 暴走吧!Snapdragon SDK开发速成指南

    (文/Aurora J) Qualcomm的Snapdragon处理器.它快如闪电.效率极高.擅长挑战多任务极限,而且拥有攻城狮们梦寐以求的无限潜能.它能确保您的手机集4G LTE.极速体验.长久续航 ...

  10. GitHub Pages使用入门

    1.什么是GitHub Pages GitHub Pages可以当做项目的Websites,GitHub Pages有两种最基本的用法: 作为你自己(或者组织)的网站(访问地址示例:http://us ...