博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ1273(最大流Isap)
阅读量:7209 次
发布时间:2019-06-29

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

题意:现在有m个池塘(从1到m开始编号,1为源点,m为汇点),及n条水渠,给出这n条水渠所连接的池塘和所能流过的水量,求水渠中所能流过的水的最大容量.

求1到n的最大流,套模板。。

1 #include 
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 #define inf 0x7fffffff 8 #define N 205 9 #define M 40510 int cur[N],pre[N],gap[N],dis[N];11 int size,head[N];12 struct Edge13 {14 int v,w,next;15 Edge(){}16 Edge(int V,int W,int NEXT):v(V),w(W),next(NEXT){}17 }edge[M];18 void Init()19 {20 memset(head,-1,sizeof(head));21 size = 0;22 }23 void InsertEdge(int u,int v,int w)24 {25 edge[size] = Edge(v,w,head[u]);26 head[u] = size++;27 edge[size] = Edge(u,0,head[v]);28 head[v] = size++;29 }30 int Isap(int st,int ed,int n)31 {32 for(int i=0; i<=n; i++)33 {34 dis[i] = gap[i] = 0;35 cur[i] = head[i];36 }37 int u = pre[st] = st;38 int aug = inf , maxflow = 0;39 while(dis[st] < n)40 {41 loop:42 for(int &i=cur[u]; i!=-1; i=edge[i].next)43 {44 int v = edge[i].v;45 if(edge[i].w && dis[u] == dis[v] + 1)46 {47 aug = min(aug,edge[i].w);48 pre[v] = u;49 u = v;50 if(v==ed)51 {52 maxflow += aug;53 for(u=pre[u]; v!=st; v=u,u=pre[u])54 {55 edge[cur[u]].w -= aug;56 edge[cur[u]^1].w += aug;57 }58 aug = inf;59 }60 goto loop;61 }62 }63 int mindis = n;64 for(int i=head[u]; i!=-1; i=edge[i].next)65 {66 int v =edge[i].v;67 if(edge[i].w && dis[v]
View Code

 

转载于:https://www.cnblogs.com/ar940507/p/3264187.html

你可能感兴趣的文章
logstash常用插件介绍
查看>>
Git命令
查看>>
如何写出优质干净的代码,这6个技巧你不能错过!
查看>>
某口腔app发现了不友善词汇(f*ckMobile)
查看>>
SAP S/4HANA生产订单创建时使用的工厂数据是从什么地方带出来的
查看>>
JavaScript的数据类型有哪些?
查看>>
如何只在IE上加载CSS样式表
查看>>
个人博客三|首页后台开发
查看>>
调用链系列四:调用链上下文传递
查看>>
在Windows下,用Hexo搭建博客
查看>>
刷前端面经笔记(十一)
查看>>
【跃迁之路】【724天】程序员高效学习方法论探索系列(实验阶段481-2019.2.14)...
查看>>
Kaggle冠军经验分享丨如何用15个月冲到排行榜的首位
查看>>
Stream流与Lambda表达式(一) 杂谈
查看>>
独家揭秘!阿里大规模数据中心的性能分析
查看>>
Valid
查看>>
大数据驱动的运营创新和探索
查看>>
你属于程序员中的哪种人?
查看>>
基于Mixin Network的PHP比特币开发教程 之一:创建机器人
查看>>
时序数据库连载系列: 时序数据库一哥InfluxDB之存储机制解析
查看>>