k种货物分开求解最小费用最大流,主要减少了寻找最短路的时间。

  

#include<queue>
#include<cstdio>
#include<cstring>
using namespace std;
#define maxe 256000 //pay
#define maxv 5120 //pay
#define maxn 55 //pay
#define sc scanf
#define pt printf
#define rep(i,a,b) for(int i=(a);i<(b);++i)
const int inf = 0x3f3f3f3f;
int fee,cg,sp,need;
int N,M,K ,s,t;
typedef struct ed{
int v,nxt,cap,dis;
}ed;
ed e[maxe];
int nxt[maxe],tot,head[maxv],vis[maxv],d[maxv],bk[maxv];
int mp[maxn][maxn][maxn];
int mi(int a,int b) {return a<b?a:b;}
void add(int u,int v,int cap,int dis)
{
e[tot].v=v; e[tot].nxt=head[u];
e[tot].dis=dis; e[tot].cap=cap;
head[u]=tot++; e[tot].v=u; e[tot].nxt=head[v];
e[tot].dis=-dis; e[tot].cap=;
head[v]=tot++;
}
int spfa()
{
queue<int> q;
int u = s,v;
q.push(u);
while(!q.empty())
{
u = q.front(); q.pop();
vis[u] = ;
for(int i = head[u];~i;i=e[i].nxt)
{
if(e[i].cap<) continue;
v = e[i].v;
if(d[u]+e[i].dis<d[v])
{
bk[v]=i;
d[v] = d[u]+e[i].dis;
if(vis[v]==)
{
q.push(v);
vis[v]=;
}
}
}
}
return d[t]!=inf;
} void init()
{
tot=;
memset(head,-,sizeof(head)); //pay
}
int cust_need[maxn][maxn];
int halt_prov[maxn][maxn];
//第一次改进:如果仓库这种东西的存量为0或者客户需求为0,他们之间不建立边 —— 居然RE了
int main()
{
freopen("in.txt","r",stdin);
d[]=; bk[]=-;
while()
{
need = fee = sp = ;
sc("%d%d%d",&N,&M,&K); //pt("%d %d %d\n",N,M,K);
if(N==&&M==&&K==) break;
s=,t=+N+M;
int i,j,k;
memset(mp,-,sizeof(mp));
for(i=;i<N;++i) for(j=;j<=K;++j) sc("%d",&cust_need[i][j]),need+=cust_need[i][j];
for(i=;i<M;++i) for(j=;j<=K;++j) sc("%d",&halt_prov[i][j]);
for(k=;k<=K;++k) for(i=;i<N;++i) for(j=;j<M;++j)
{
sc("%d",&mp[k][i][j]);
if(halt_prov[j][k]==||cust_need[i][k]==) continue;
add(j*K+k,K*M+i*K+k,mi(halt_prov[j][k],cust_need[i][k]),mp[k][i][j]);
}
for(k=;k<=K;++k)
{
init();
for(i=;i<N;++i) if(cust_need[i][k]>) add(+M+i,t,cust_need[i][k],);
for(j=;j<M;++j) if(halt_prov[j][k]>) add(,+j,halt_prov[j][k],);
for(i=;i<N;++i) for(j=;j<M;++j)
{
if(halt_prov[j][k]==||cust_need[i][k]==) continue;
add(+j,+M+i,mi(halt_prov[j][k],cust_need[i][k]),mp[k][i][j]);
}
while()
{
for(i=;i<=t;++i) d[i]=inf,vis[i]=;
if(spfa()==) break;
int min_flow = inf;
cg=bk[t];
while(cg!=-)
{
min_flow = mi(min_flow,e[cg].cap);
cg=bk[e[cg^].v];
}
sp+=min_flow;
cg=bk[t];
while(cg!=-)
{
e[cg].cap-=min_flow;
e[cg^].cap+=min_flow;
fee+=e[cg].dis*min_flow;
cg=bk[e[cg^].v];
}
}
}
if(sp==need) pt("%d\n",fee); // write(fee), pt("\n");
else pt("-1\n");
} return ;
}

POJ 2516

网络流强化-POJ2516的更多相关文章

  1. 网络流强化-HDU2732

    第一次遇到加了“多余”的边会导致WA的——在我看来是很多余,见代码191行 之后会思考为什么,想出来再更. 问题弄明白了,如果你在连接边连了一条到没有柱子的点的边,这个没有柱子的点是不可能连到终点的, ...

  2. 网络流强化-HDU 3338-上下界限制最大流

    题意是: 一种特殊的数独游戏,白色的方格给我们填1-9的数,有些带数字的黑色方格,右上角的数字代表从他开始往右一直到边界或者另外一个黑格子,中间经过的白格子的数字之和要等于这个数字:左下角的也是一样的 ...

  3. 网络流强化-UVA10480

    做这道题,自己先是想了好几种找被割的边的方法——都被否决了. 后来发现是最小割:只要一条边的两端在不同的点集里面就代表是被割掉的满流边(这些满流边的流量和等于最大流的流量与最小割的权值和). 但是之前 ...

  4. 网络流强化-HDU4280

    数组没开够居然显示TLE而不是RE,自己觉得好的优化的方法没什么用…… //http://www.renfei.org/blog/isap.html 带解释的 //https://www.cnblog ...

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

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

  6. 【算法】【网络流24题】巨坑待填(成功TJ,有时间再填)

    ------------------------------------------------------------------------------------ 17/24 --------- ...

  7. [django]数据导出excel升级强化版(很强大!)

    不多说了,原理采用xlwt导出excel文件,所谓的强化版指的是实现在网页上选择一定条件导出对应的数据 之前我的博文出过这类文章,但只是实现导出数据,这次左思右想,再加上网上的搜索,终于找出方法实现条 ...

  8. ITTC数据挖掘平台介绍(七)强化的数据库, 虚拟化,脚本编辑器

    一. 前言 好久没有更新博客了,最近一直在忙着找工作,目前差不多尘埃落定.特别期待而且准备的都很少能成功,反而是没怎么在意的最终反而能拿到,真是神一样的人生. 言归正传,一直以来,数据挖掘系统的数据类 ...

  9. plain framework 1 网络流 缓存数据详解

    网络流是什么?为什么网络流中需要存在缓存数据?为什么PF中要采用缓存网络数据的机制?带着这几个疑问,让我们好好详细的了解一下在网络数据交互中我们容易忽视以及薄弱的一块.该部分为PF现有的网络流模型,但 ...

随机推荐

  1. Hdu 4578 Transformation (线段树 分类分析)

    Transformation Time Limit: 15000/8000 MS (Java/Others)    Memory Limit: 65535/65536 K (Java/Others)T ...

  2. 【剑指offer】Q16:翻转链表

    def reverse(head): if head == None or head.next == None: return head psuhead = ListNode(-1) while he ...

  3. Linux 使用ansible配置集群间互信

    安装pip $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py # 下载安装脚本 $ sudo python get-pip.py # ...

  4. windows 安装nodejs 和 npm

    1.从nodejs官网下载 安装文件,我安装的版本是  node-v10.15.0-x64.msi ,双击进行安装. 2.安装完成后可以查看相关目录,这里会有一个node_modules目录和node ...

  5. linux清理 clientmqueue 垃圾文件防止 inode 被占满

    #find /var/spool/clientmqueue/ -type -f |xargs rm -f

  6. pg_ctl - 启动,停止和重启 PostgreSQL 服务器

    SYNOPSIS pg_ctl start [ -w ] [ -s ] [ -D datadir] [ -l filename] [ -o options] [ -p path] pg_ctl sto ...

  7. IC设计流程介绍

    芯片设计分为前端设计和后端设计,前端设计(也称逻辑设计)和后端设计(也称物理设计)并没有统一严格的界限,涉及到与工艺有关的设计就是后端设计. 1. 规格制定        芯片规格,也就像功能列表一样 ...

  8. sed \s

    export m1=`free|cut -d ":" -f2|sed -e "s/^\s\s*//g"|head -2|tail -1|cut -d ' ' - ...

  9. @ApiModelProperty

    @ApiModelProperty用法   @ApiModelProperty()用于方法,字段: 表示对model属性的说明或者数据操作更改 value–字段说明 name–重写属性名字 dataT ...

  10. VSCode必备插件

    通用组件 1.汉化插件 https://marketplace.visualstudio.com/items?itemName=MS-CEINTL.vscode-language-pack-zh-ha ...