博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ-1497 最大获利
阅读量:4342 次
发布时间:2019-06-07

本文共 1739 字,大约阅读时间需要 5 分钟。

这是道网络流的题

怎么样建图呢?我们从每个人 Ai 连边至其所对应的两个设备 Bi Bj,流量为+∞。

然后新建一对源汇,源连至每个人,流量为满足此人要求的利润;每个设备连至汇,流量为建造设备的代价。

然后求最大流flow,答案就是总利润减去flow。

为什么这种建模可以呢?我们可以通过残留网络来观察。

我们会发现,答案的大小和残留网络中从源点出发的边的可行流量之和一致。

而且每条增广路会经过一条流量是成本的边和流量是利润的边,而且两者的可行流量是同时减小的。这就相当于利润和成本相互抵销。

若存在着一种最大获利的方案,我们就可以通过此方案构造一个残留网络。

所以可以用这种方法求最大获利。

#include 
#include
#include
#include
#include
#include
#define rep(i, l, r) for(int i=l; i<=r; i++) #define down(i, l, r) for(int i=l; i>=r; i--) #define clr(x, c) memset(x, c, sizeof(c))#define travel(x) for(edge *p=d[x]; p; p=p->n) if (p->z)#define maxv 56789#define maxm 434567#define inf 0x7fffffffusing namespace std;int read(){ int x=0; char ch=getchar(); while (!isdigit(ch)) ch=getchar(); while (isdigit(ch)) { x=x*10+ch-'0'; ch=getchar(); } return x;}struct edge{int y, z; edge *n, *pair;} e[maxm], *fir[maxv], *pt, *d[maxv];inline void Init() {pt=e, clr(fir, 0);}inline void Add(int x, int y, int z) {pt->y=y, pt->z=z, pt->n=fir[x]; fir[x]=pt++;}inline void AddE(int x, int y, int z) {Add(x, y, z); Add(y, x, 0); fir[x]->pair=fir[y], fir[y]->pair=fir[x];}int h[maxv], gap[maxv], S, T, V;int n, m, ans;int sap(int now, int flow){ if (now==T) return flow; int rec=0, ret; travel(now) if (h[p->y]+1==h[now]) { ret=sap(p->y, min(flow-rec, p->z)); p->z-=ret, p->pair->z+=ret, d[now]=p; if ((rec+=ret)==flow) return flow; } if (!(--gap[h[now]])) h[S]=V; ++gap[++h[now]]; d[now]=fir[now]; return rec;}inline int maxflow(){ clr(h, 0), clr(gap, 0); gap[0]=V; rep(i, 1, V) d[i]=fir[i]; int flow=0; while (h[S]
n) ans+=p->z; ans-=maxflow(); printf("%d\n", ans); return 0;}

转载于:https://www.cnblogs.com/NanoApe/p/4442624.html

你可能感兴趣的文章
蚂蚁金服井贤栋:用技术联手金融机构,形成服务小微的生态合力
查看>>
端口号大全
查看>>
机器学习基石笔记2——在何时可以使用机器学习(2)
查看>>
POJ 3740 Easy Finding (DLX模板)
查看>>
MySQL 处理重复数据
查看>>
关于typedef的用法总结(转)
查看>>
Linux下安装rabbitmq
查看>>
曹德旺
查看>>
【转】判断点在多边形内(matlab)
查看>>
java基础之集合:List Set Map的概述以及使用场景
查看>>
Python 线程 进程 协程
查看>>
iOS语言中的KVO机制
查看>>
excel第一次打开报错 向程序发送命令时出错 多种解决办法含终极解决方法
查看>>
响应式web设计之CSS3 Media Queries
查看>>
实验三
查看>>
机器码和字节码
查看>>
环形菜单的实现
查看>>
【解决Chrome浏览器和IE浏览器上传附件兼容的问题 -- Chrome关闭flash后,uploadify插件不可用的解决办法】...
查看>>
34 帧动画
查看>>
二次剩余及欧拉准则
查看>>