首页 技术 正文
技术 2022年11月6日
0 收藏 875 点赞 224 浏览 1800 个字

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

建边麻烦了些

#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 ;
}
下一篇: bzoj1063
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,147
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,618
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,461
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,236
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,871
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,953