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. 4. git目录探秘

    HEAD当前指向的分支信息.cconfig,当前仓库的配置信息,core,用户,远程,分支等信息.(命令操作其实就是修改当前config文件)refs---heads,其实就是分支,里面包含所有的分支 ...

  2. App的工程框架

    对于我刚下载的Android studio,来说一说它的框架结构  Project项目结构: .gradle:Gradle编译系统,版本由wrapper指定 .idea:IDE所需要的文件 .app: ...

  3. delphpi tcp 服务和客户端 例子

    //服务器端unit Unit1; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, ...

  4. 关于gc中对象回收算法的认识

    之前学习java时,笔者看到很多学习资料说,gc判断object存活与否的算法是:给对象添加一个引用计数器,每当有一处地方引用它时,计数器值就加1,当引用失效时,计数器值就减1,当对象计数清零时,对象 ...

  5. Activiti工作流的入门介绍

    一.activiti介绍 Activiti5是一个 业务流程管理(BPM)框架,它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易扩展的可执行流程语言框架.Activiti基于Ap ...

  6. PAT Advanced 1008 Elevator (20) [数学问题-简单数学]

    题目 The highest building in our city has only one elevator. A request list is made up with N positive ...

  7. echars 柱状图点击事件

     drawlineCRK() {       let _this = this;       ///绘制echarts 柱状图       let mycharts = this.$echarts.i ...

  8. 题解 P2738 【[USACO4.1]篱笆回路Fence Loops】

    这题是我期中测试的一题水题,然而英文题目太长了不想读...后面考完被同学提醒后20分钟切了(心塞) 切完看了波题解,发现貌似我的方法跟大家都不一样呢... 常规做法: \(Floyd\) 这个有三页的 ...

  9. 完成在本机远程连接HBase进行数据增删改查

    1.进行hbase与本机远程连接测试连接 1.1 修改虚拟机文件hbase-site.xml(cd/usr/local/hbase/conf)文件,把localhost换成你的虚拟机主机名字 1.2修 ...

  10. switch-case的用法

    case 值1: 表达式的值和 值1匹配上了,需要执行的代码; break; case 值2: 表达式的值和 值2匹配上了,需要执行的代码; break; case 值3: 表达式的值和 值3匹配上了 ...