http://poj.org/problem?id=2516

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define maxn 110
using namespace std; int need[maxn][maxn];
int sup[maxn][maxn];
int cost[maxn][maxn][maxn];
int cap[maxn][maxn];
int flow[maxn][maxn];
int cost1[maxn][maxn];
int d[maxn];
int p[maxn];
int n,m,k;
const int inf=<<; int main()
{
while(scanf("%d%d%d",&n,&m,&k)!=EOF){
memset(p,,sizeof(p));
memset(cost1,,sizeof(cost1));
memset(need,,sizeof(need));
if(n==&&m==&&k==) break;
for(int i=; i<=n; i++){
for(int j=; j<=k; j++)
{
scanf("%d",&need[i][j]);
}
}
for(int i=; i<=m; i++)
{
for(int j=; j<=k; j++)
{
scanf("%d",&sup[i][j]);
}
}
for(int c=; c<=k; c++)
{
for(int i=; i<=n; i++)
{
for(int j=; j<=m; j++)
{
scanf("%d",&cost[c][j][i]);
}
}
}
int s=,t=n+m+;
bool flag=true;
int tt=;
for(int i=; i<=k; i++)
{
memset(cap,,sizeof(cap));
for(int j=; j<=m; j++)
cap[s][j]=sup[j][i];
for(int j=; j<=m; j++)
{
for(int c=; c<=n; c++)
{
cap[j][m+c]=sup[j][i];
}
}
for(int j=; j<=m; j++)
cap[j+m][t]=need[j][i];
memset(flow,,sizeof(flow));
for(int j=; j<=m; j++)
{
for(int c=; c<=n; c++)
{
cost1[j][c+m]=cost[i][j][c];
cost1[c+m][j]=-cost1[j][c+m];
}
}
queue<int>q;
memset(flow,,sizeof(flow));
int mm=;
for(;;)
{
bool inq[maxn];
for(int i=; i<=n+m+; i++) d[i]=(i==s?:inf);
memset(inq,false,sizeof(inq));
q.push(s);
while(!q.empty())
{
int u=q.front(); q.pop();
inq[u]=false;
for(int v=; v<=n+m+; v++) if(cap[u][v]>flow[u][v]&&d[v]>d[u]+cost1[u][v])
{
d[v]=d[u]+cost1[u][v];
p[v]=u;
if(!inq[v])
{
inq[v]=true;
q.push(v);
}
}
}
if(d[t]==inf) break;
int a=inf;
for(int u=t; u!=s; u=p[u])
{
if(cap[p[u]][u]-flow[p[u]][u]<a)
{
a=cap[p[u]][u]-flow[p[u]][u];
}
}
for(int u=t; u!=s; u=p[u])
{
flow[p[u]][u]+=a;
flow[u][p[u]]-=a;
}
mm+=d[t]*a;
}
for(int j=; j<=n; j++)
{
if(flow[j+m][t]!=cap[j+m][t])
{
flag=false;
break;
}
}
if(!flag) break;
if(flag) tt+=mm;
}
if(flag) printf("%d\n",tt);
else printf("-1\n");
}
return ;
}

poj 2516Minimum Cost的更多相关文章

  1. POJ 2516Minimum Cost(最小费用流+特判)

    [题意]: 有N个人,M个仓库,每个人需要物品,个数都等于共同的K,仓库中有对应的K件物品的数量,随后给K个N*M矩阵(小写k, n, m表示K,N,M对应的子集),表明m个仓库到第n个人的位置运送k ...

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

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

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

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

  4. Poj 2516 Minimum Cost (最小花费最大流)

    题目链接: Poj  2516  Minimum Cost 题目描述: 有n个商店,m个仓储,每个商店和仓库都有k种货物.嘛!现在n个商店要开始向m个仓库发出订单了,订单信息为当前商店对每种货物的需求 ...

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

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

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

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

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

    https://vjudge.net/problem/11079/origin 题意:有N个商店和M个供应商和K种物品,每个商店每种物品有一个需求数,每个供应商每种物品有一个供应量,供应商到商店之间的 ...

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

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

  9. POJ 2516 Minimum Cost 最小费用流

    题目: 给出n*kk的矩阵,格子a[i][k]表示第i个客户需要第k种货物a[i][k]单位. 给出m*kk的矩阵,格子b[j][k]表示第j个供应商可以提供第k种货物b[j][k]单位. 再给出k个 ...

随机推荐

  1. OpenMP与C++:事半功倍地获得多线程的好处

    来源:IIEEG 01-28-2011 在并行计算领域有一个广为流传的笑话——并行计算是未来之事并且永远都是.这个小笑话几十年来一直都是对的.一种类似的观点在计算机架构社区中流传,处理器时钟速度的极限 ...

  2. ubuntu下安装svn

    Ubuntu下使用SVN SVN作为日常开发中不可缺少的工具,今天终于开始在Ubuntu下使用了. 1.首先需要安装SVN.Ubuntu下的SVN安装十分简单,sudo apt-get install ...

  3. 关于URL重写

    1.  为什么要使用url重写? 先从session的原理讲起,为什么我们能够获得session中的东西呢?如果没有禁用cookie的话,那么session创建之后,会将session id的值通过r ...

  4. Gradle 1.12 翻译——第十三章 编写构建脚本

    有关其它已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或訪问:http://gradledoc.qiniudn.com ...

  5. 如何判断MSSQL数据库磁盘出现了瓶颈

    问大神石沫:如何判断MSSQL数据库磁盘出现了瓶颈? 石沫(A1):您好,您的问题非常好,SQL SERVER提供了很多关于I/O压力的性能计数器,请选择性能计算器PhysicalDisk(Logic ...

  6. Android 设计模式之观察者模式(转载自:“http://blog.csdn.net/fangchongbory/article/details/7774044”)

    /* * 观察者模式 *      定义对象间的一种一个(Subject)对多(Observer)的依赖关系,当一个对象的状态发送改变时,所以依赖于它的 * 对象都得到通知并被自动更新 * * 当然, ...

  7. Android关闭系统锁屏

    昨晚探索了一下Android系统内的目录,意外发现系统锁屏的数据库 使用adb shell进入系统根目录 adb shell su sqlite3 data/system/locksettings.d ...

  8. 检测网络变化(wifi、2g、3g、4g)

    检测网络变化(wifi.2g.3g.4g) 1.注册广播"android.net.conn.CONNECTIVITY_CHANGE"和"android.net.wifi. ...

  9. ASP.NET面试

    1.net中读写数据库需要用到那些类?他们的作用都是什么?答:DataSet:数据存储器.DataCommand:执行语句命令.DataAdapter:数据的集合,用语填充.2.介绍一下什么是Code ...

  10. excel - 统计字符个数综合案例

    本文通过一个综合的案例来介绍excel统计字符数的一些方法和思路,供大家参考和学习. 下图是一个excel数据源截图,我们逐一讲解不同条件的统计字符数. 第一,统计A2所有的字符数,不论是汉字和数字. ...