博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zkw费用流模板
阅读量:7044 次
发布时间:2019-06-28

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

 

理论:

 

#include
#include
#include
#include
using namespace std;#define N 5001#define M 50001const int inf=1e9;int n,m,src,decc;int tot=1;int front[N],to[M<<1],nxt[M<<1],from[M<<1];int val[M<<1],cap[M<<1];int max_flow,cost;int dis[N];bool vis[N];void read(int &x){ x=0; char c=getchar(); while(!isdigit(c)) c=getchar(); while(isdigit(c)) { x=x*10+c-'0'; c=getchar(); }}void add(int u,int v,int w,int f){ to[++tot]=v; nxt[tot]=front[u]; front[u]=tot; from[tot]=u; val[tot]=f; cap[tot]=w; to[++tot]=u; nxt[tot]=front[v]; front[v]=tot; from[tot]=v; val[tot]=-f; cap[tot]=0;}int augment(int now,int flow){ vis[now]=true; if(now==decc) { cost+=-dis[src]*flow; max_flow+=flow; return flow; } int delta; for(int i=front[now];i;i=nxt[i]) { if(cap[i] && !vis[to[i]] && dis[to[i]]==dis[now]+val[i]) { delta=augment(to[i],min(flow,cap[i])); if(delta) { cap[i]-=delta; cap[i^1]+=delta; return delta; } } } return 0;}bool retreat(){ if(vis[decc]) return true; int mi=inf; for(int i=2;i<=tot;i++) { if(cap[i] && vis[from[i]] && !vis[to[i]]) mi=min(mi,dis[from[i]]+val[i]-dis[to[i]]); } if(mi==inf) return false; for(int i=1;i<=n;++i) if(vis[i]) dis[i]-=mi; return true;}void zkw(){ do { memset(vis,false,sizeof(vis)); augment(src,inf); }while(retreat()); cout<
<<' '<

 

转载于:https://www.cnblogs.com/TheRoadToTheGold/p/8081914.html

你可能感兴趣的文章
RAID磁盘阵列笔记
查看>>
CloudStack Site-to-Site & Remote Access ××× 应用案例
查看>>
php过滤提交数据 防止sql注入***(6)
查看>>
flv视频网站制作 使用Flex和PHP创建自己的视频应用
查看>>
用Windows Server 2003配置×××
查看>>
python笔记-模块
查看>>
如何配置MySQL集群在一台服务器
查看>>
Lync Server 2013 部署 _ Lync Server 边缘高可用(DNS轮询)
查看>>
memcached安装
查看>>
每天laravel-20160719|Parser
查看>>
浅谈Linux开机启动流程
查看>>
Android 的NumberPicker相关问题
查看>>
dns安装配置
查看>>
我的友情链接
查看>>
安全世界观
查看>>
Linux网络编程基础_4_网络层(六)--移动IP与网络层设备
查看>>
Eclipse 的 J2EE Preview Server 端口设置
查看>>
winform 一个点击事件触发另一个点击事件
查看>>
关于empty()返回Fatal error: Can't use function return value in write context的错误问题
查看>>
为什么有了uwsgi还要nginx这个“前端”服务器
查看>>