依然最小费用最大流模板题

建边麻烦了些

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>
#include <utility>
#include <stack>
#include <queue>
#include <map>
#include <deque>
#define max(x,y) ((x)>(y)?(x):(y))
#define min(x,y) ((x)<(y)?(x):(y))
#define INF 0x3f3f3f3f
#define MAXM 3005
#define MAXN 300
using namespace std; struct Edge
{
int y,c,w,ne;
}e[MAXM*]; int all,be[MAXN],n,m,k,x,y,w,ans,Mincost,Maxflow,s,t,q[MAXM*];
int supply[MAXN][MAXN],need[MAXN][MAXN];
int pre[MAXN],dis[MAXN];
bool vis[MAXN]; void init()
{
all=;
memset(be,-,sizeof(be));
}
void add(int x, int y, int c, int w)
{
e[all].y=y;e[all].c=c;e[all].w=w;
e[all].ne=be[x];
be[x]=all++; e[all].y=x;e[all].c=;e[all].w=-w;
e[all].ne=be[y];
be[y]=all++;
} bool spfa(int s, int t)
{
queue<int> q;
for(int i=; i<n+m+; i++)
{
dis[i]=INF;
vis[i]=;
pre[i]=-;
}
dis[s]=;
vis[s]=;
q.push(s);
while(!q.empty())
{
int u=q.front();
vis[u]=;
q.pop();
for(int i=be[u]; i!=-; i=e[i].ne)
{
int v=e[i].y;
if(e[i].c && dis[v]>dis[u]+e[i].w)
{
dis[v]=dis[u]+e[i].w;
pre[v]=i;
if(!vis[v])
{
vis[v]=;
q.push(v);
}
}
}
}
if(pre[t]==-) return ;
return ;
} void MincostMaxflow(int s, int t)
{
Mincost=Maxflow=;
while(spfa(s,t))
{
int minc=INF;
for(int i=pre[t]; i!=-; i=pre[e[i^].y])
if(minc>e[i].c) minc=e[i].c;
for(int i=pre[t]; i!=-; i=pre[e[i^].y])
{
e[i].c-=minc;
e[i^].c+=minc;
Mincost+=e[i].w*minc;
}
Maxflow+=minc;
}
} int main()
{
while(scanf("%d%d%d",&n,&m,&k)!=EOF && n && m && k)
{ 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",&supply[i][j]); s=m+n;
t=m+n+;
bool flag=;
ans=;
for(int tk=; tk<k; tk++)
{
init();
for(int i=; i<n; i++)
for(int j=; j<m; j++)
{
scanf("%d",&w);
add(j,i+m,INF,w);
}
if(flag)
{
for(int i=; i<m; i++)
add(s,i,supply[i][tk],);
for(int i=; i<n; i++)
add(m+i,t,need[i][tk],);
MincostMaxflow(s,t); for(int i=be[t]; i!=-; i=e[i].ne)
if(e[i^].c>) flag=;
if(flag) ans+=Mincost;
}
}
if(!flag) printf("-1\n");
else printf("%d\n",ans);
}
return ;
}

POJ 2516 最小费用流的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. 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个 ...

  7. POJ 2516 Minimum Cost 最小费用流 难度:1

    Minimum Cost Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 13511   Accepted: 4628 Des ...

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

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

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

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

随机推荐

  1. 【经验】Angularjs 中使用 layDate 日期控件

    layDate 控件地址:http://laydate.layui.com/ 前情:原来系统中使用的日期控件是UI bootstrap(地址:https://angular-ui.github.io/ ...

  2. Basic Concepts of International Trade

    The international trade structure is a reflection of worldwide economic development, industrial stru ...

  3. HDU 4101 Ali and Baba

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=4101 一看之下以为是博弈,后来分析才知道只是搜索题. 首先,我们需要从值为-1的位置由内向外搜索一次, ...

  4. UI框架说明

    JQueryEasyUI jQuery EasyUI是一组基于jQuery的UI插件集合,而jQuery EasyUI的目标就是帮助web开发者更轻松的打造出功能丰富并且美观的UI界面.开发者不需要编 ...

  5. spoj 1108

    要求输出一个牌的顺序 使每隔1.2.......n翻牌后出现1 2 3 4 5 6 7 8 9 .... n 将牌想象成n个空格  正向推 空n个位置放n 循环 需优化 #include <io ...

  6. Unity3d 一些 常见路径

    Application.persistentDataPath C:\Users\Administrator\AppData\LocalLow\Company Name\Product Name 如果改 ...

  7. 设置go语言语法高亮

    1. 将$GOROOT/misc/vim/go.vim文件拷贝到-/.vim/syntax/目录下 2. 添加下面代码到~/.vimrc文件中 let mysyntaxfile = "XXX ...

  8. POJ2104 K-th Number Range Tree

    又是区间第k大,这次选择这道题是为以后写线段树套平衡树铺路的.Range Tree可以理解成线段树套vector吧,相当于每个结点多存了对应区间的一个排好序的序列.画一下就会知道空间的消耗是nlogn ...

  9. zoj 3716 Ribbon Gymnastics (思维数学题)

    题目 以四个顶点为圆心画圆,圆面积不能重合,求四个圆的直径和最大是多少. #define _CRT_SECURE_NO_WARNINGS #include<string.h> #inclu ...

  10. HDU 1540 / POJ 2892 Tunnel Warfare (单点更新,区间合并,求包含某点的最大连续个数)

    题意:一条线上有n个点,D x是破坏这个点,Q x是表示查询x所在的最长的连续的点的个数,R是恢复上一次破坏的点. 思路:这题的关键是查询. 将被毁的村庄看成空位,当查询某个点的时候,如果我们知道它左 ...