isap模板核心代码:

 //d[]为距离标号数组,d[i]表示节点i到汇点的距离
//gap[]为GAP优化数组,gap[i]表示到汇点距离为i的节点个数
int dfs(int k,int flow){//flow为当前剩余流量
int i;
if(k==t)return flow;
int sum=;
for(i=head[k];i;i=e[i].nxt){
int v=e[i].to;
if(e[i].f&&d[k]==d[v]+){//判断能否通过流量以及走的是否为最短路
int f=dfs(v,min(flow-sum,e[i].f));//注意是flow-sum,要将已用过的流量减去
sum+=f;head[k]=i;//当前弧优化
e[i].f-=f;e[i^].f+=f;
if(sum==flow||d[s]==cnt)return sum;//流量全部流完或者达到退出条件则返回
}
}
if((--gap[d[k]])==)d[s]=cnt;//若gap[]出现断层,则无法增广
gap[++d[k]]++;//
head[k]=h[k];//
return sum;
} int sap(){
memcpy(h,head,sizeof(head));
memset(d,,sizeof(d));
memset(gap,,sizeof(gap));
gap[]=cnt;
int flow=;
while(d[s]<cnt)
flow+=dfs(s,inf);
return flow;
}

一道水题:poj1273

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

有多组数据!网上查的中文题意没说,样例只给了一组,WA。

 #include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define repu(i,x,y) for(int i=x;i<=y;i++)
using namespace std; struct edge{int to,nxt,f;}e[];
const int inf=1e9;
int head[],h[],d[],gap[],n,m,ne=,s,t,cnt; void add(int u,int v,int f){
e[++ne]=(edge){v,head[u],f};head[u]=ne;
} //d[]为距离标号数组,d[i]表示节点i到汇点的距离
//gap[]为GAP优化数组,gap[i]表示到汇点距离为i的节点个数
int dfs(int k,int flow){//flow为当前剩余流量
int i;
if(k==t)return flow;
int sum=;
for(i=head[k];i;i=e[i].nxt){
int v=e[i].to;
if(e[i].f&&d[k]==d[v]+){//判断能否通过流量以及走的是否为最短路
int f=dfs(v,min(flow-sum,e[i].f));//注意是flow-sum,要将已用过的流量减去
sum+=f;head[k]=i;//当前弧优化
e[i].f-=f;e[i^].f+=f;
if(sum==flow||d[s]==cnt)return sum;//流量全部流完或者达到退出条件则返回
}
}
if((--gap[d[k]])==)d[s]=cnt;//若gap[]出现断层,则无法增广
gap[++d[k]]++;//
head[k]=h[k];//
return sum;
} int sap(){
memcpy(h,head,sizeof(head));
memset(d,,sizeof(d));
memset(gap,,sizeof(gap));
gap[]=cnt;
int flow=;
while(d[s]<cnt)
flow+=dfs(s,inf);
return flow;
} int main(){
int u,v,f;
while(scanf("%d%d",&n,&m)!=EOF){
ne=;
memset(e,,sizeof(e));
memset(head,,sizeof(head));
repu(i,,n){
scanf("%d%d%d",&u,&v,&f);
add(u,v,f);add(v,u,);
}
cnt=m;s=;t=m;
int ans=sap();
printf("%d\n",ans);
}
return ;
}

最大流/最小割模板(isap) POJ1273的更多相关文章

  1. 最大流-最小割 MAXFLOW-MINCUT ISAP

    简单的叙述就不必了. 对于一个图,我们要找最大流,对于基于增广路径的算法,首先必须要建立反向边. 反向边的正确性: 我努力查找了许多资料,都没有找到理论上关于反向边正确性的证明. 但事实上,我们不难理 ...

  2. ISAP 最大流 最小割 模板

    虽然这道题用最小割没有做出来,但是这个板子还是很棒: #include<stdio.h> #include<math.h> #include<string.h> # ...

  3. 【网络流#8】POJ 3469 Dual Core CPU 最小割【ISAP模板】 - 《挑战程序设计竞赛》例题

    [题意]有n个程序,分别在两个内核中运行,程序i在内核A上运行代价为ai,在内核B上运行的代价为bi,现在有程序间数据交换,如果两个程序在同一核上运行,则不产生额外代价,在不同核上运行则产生Cij的额 ...

  4. poj2914无向图的最小割模板

    题意:给出无向图的点,边,权值.求最小割. 思路:根据题目规模,最大流算法会超时. 网上参考的模板代码. 代码: /*最小割集◎Stoer-Wagner算法:一个无向连通网络,去掉一个边集可以使其变成 ...

  5. 最大流&最小割 - 专题练习

    [例1][hdu5889] - 算法结合(BFS+Dinic) 题意 \(N\)个点\(M\)条路径,每条路径长度为\(1\),敌人从\(M\)节点点要进攻\(1\)节点,敌人总是选择最优路径即最短路 ...

  6. UVa11248 Frequency Hopping(最大流+最小割)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=33206 [思路] 最大流最小割. 可以确定的是如果不可行需要修改的 ...

  7. matlab练习程序(最大流/最小割)

    学习这个算法是为学习图像处理中的图割算法做准备的. 基本概念: 1.最大流是一个有向图. 2.一个流是最大流,当且仅当它的残余网络中不包括增广路径. 3.最小割就是网络中所有割中值最小的那个割,最小割 ...

  8. 「网络流24题」「LuoguP2774」方格取数问题(最大流 最小割

    Description 在一个有 m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法.对于给定的方 ...

  9. HDU6582 Path【优先队列优化最短路 + dinic最大流 == 最小割】

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6582 来源:2019 Multi-University Training Contest 1 题目大意 ...

随机推荐

  1. 吴裕雄--天生自然MySQL学习笔记:MySQL NULL 值处理

    MySQL 使用 SQL SELECT 命令及 WHERE 子句来读取数据表中的数据,但是当提供的查询条件字段为 NULL 时,该命令可能就无法正常工作. 为了处理这种情况,MySQL提供了三大运算符 ...

  2. TCP连接为什么三次握手四次挥手

    前几天面试某电商被问住了,问的很细,我就说了说连接过程,必然凉凉.在csdn上找了一篇很详细的博客.https://blog.csdn.net/hyg0811/article/details/1023 ...

  3. 洛谷 P1032 字串变换(map)

    题目传送门 解题思路: 搜索题,因为要求最少次数,用bfs. AC代码: #include<cstdio> #include<iostream> #include<cst ...

  4. linux-线程同步之信号量

    1.任务:用户从终端输入任意字符然后统计字符个数显示,输入end则结束 2.使用多线程实现:主线程获取用户输入并判断是否退出,子线程计数 #include <stdio.h> #inclu ...

  5. Unity使用TUIO协议接入雷达

    本篇文章不介绍Unity.TUIO.雷达是什么以及有什么作用.刚接触TUIO的亲们,建议直接硬刚.至于刚接触Unity的亲,这边建议亲直接放弃治疗呢 下面开始正儿八经的教程 需要准备的东西 Unity ...

  6. 20.docker 持久化存储与数据共享

    1.image layer 和 container layer 的关系 image layer 是可读的 container layer 是在image layer 之上创建的 一个可读可写层 con ...

  7. ubuntu14.10安装gitlab

    1 换源: # curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/ ...

  8. 课程报名 | 5G时代的视频云服务关键技术与实践

    6月3日,工业和信息化部宣布将于近期发放5G商用牌照.这也意味着,中国正式进入了5G时代. 5G身上有很多新标签:"大规模天线"."新的编码技术"." ...

  9. 寒假day02-spring框架

    1 入门案例:IoC[掌握] 1.1 导入jar包 . 4 + 1  : 4个核心(beans.core.context.expression) + 1个依赖(commons-loggins...ja ...

  10. 分布式场景下Kafka消息顺序性的思考

    如果业务中,对于kafka发送消息异步消费的场景,在业务上需要实现在消费时实现顺序消费, 利用kafka在partition内消息有序的特点,消息消费时的有序性. 1.在发送消息时,通过指定parti ...