最大流模板题

今天补最大流,先写道模板题,顺便写点对它的理解

最大流问题就是给一个幽香有向图,每一条边有容量,问若从$s$点放水,最多会有多少水流到$t$

为了解决整个问题,第一步我们当然要找到一条路径让它达到满流的状态,这里直接xjbdfs即可

比如我们找到一条路径$1\to2\to3\to4$,流量为$2$

但是我们有可能需要“反悔”,比如不走$2\to3$而走$2\to4$

这时我们可以使用一些小技巧:添加反向边并更新正向边的容量

以后如果我们走了反向边就相当于是在“反悔”

我们把上述找一条路径的过程称为“寻找增广路”

为了避免处理环等奇怪的情况,我们在每次找增广路之前先bfs一次记录每条边边权为$1$的最短路(其实是把图分层),然后按照距离$dis$dfs,即在$u$时下一步只访问$dis[v]=dis[u]+1$的点$v$

每次bfs完要一直找增广路直到找不到为止,若bfs不能到达$t$则证明没有增广路(已经满流了)

代码挺短的2333

#include<stdio.h>
#include<string.h>
#define inf 1000000000
struct edge{
	int to,nex,cap;
}e[410];
int h[210],dis[210],q[40010],tot,n;
void add(int a,int b,int c){
	tot++;
	e[tot].to=b;
	e[tot].cap=c;
	e[tot].nex=h[a];
	h[a]=tot;
}
bool bfs(){
	int head=1,tail=1,s,i;
	q[1]=1;
	memset(dis,-1,sizeof(dis));
	dis[1]=0;
	while(head<=tail){
		s=q[head];
		head++;
		for(i=h[s];i;i=e[i].nex){
			if(dis[e[i].to]==-1&&e[i].cap>0){
				dis[e[i].to]=dis[s]+1;
				tail++;
				q[tail]=e[i].to;
			}
		}
	}
	return dis[n]>0;
}
int min(int a,int b){return a<b?a:b;}
int dfs(int x,int flow){
	if(x==n)return flow;
	int i,f;
	for(i=h[x];i;i=e[i].nex){
		if(e[i].cap>0&&dis[e[i].to]==dis[x]+1){
			f=dfs(e[i].to,min(flow,e[i].cap));
			if(f){
				e[i].cap-=f;
				e[i^1].cap+=f;
				return f;
			}
		}
	}
	return 0;
}
int main(){
	int m,i,a,b,c,ans,tmp;
	while(~scanf("%d%d",&m,&n)){
		tot=1;
		memset(h,0,sizeof(h));
		for(i=1;i<=m;i++){
			scanf("%d%d%d",&a,&b,&c);
			add(a,b,c);
			add(b,a,0);
		}
		ans=0;
		while(bfs()){
			while(tmp=dfs(1,inf))ans+=tmp;
		}
		printf("%d\n",ans);
	}
}

[HDU1532]Drainage Ditches的更多相关文章

  1. HDU1532 Drainage Ditches 网络流EK算法

    Drainage Ditches Problem Description Every time it rains on Farmer John's fields, a pond forms over ...

  2. hdu-----(1532)Drainage Ditches(最大流问题)

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  3. HDU1532 Drainage Ditches 【最大流量】

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  4. HDU1532 Drainage Ditches SAP+链式前向星

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  5. POJ1273&&Hdu1532 Drainage Ditches(最大流dinic) 2017-02-11 16:28 54人阅读 评论(0) 收藏

    Drainage Ditches Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. HDU-1532 Drainage Ditches,人生第一道网络流!

    Drainage Ditches 自己拉的专题里面没有这题,网上找博客学习网络流的时候看到闯亮学长的博客然后看到这个网络流入门题!随手一敲WA了几发看讨论区才发现坑点! 本题采用的是Edmonds-K ...

  7. HDU1532 Drainage Ditches —— 最大流(sap算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 Drainage Ditches Time Limit: 2000/1000 MS (Java/ ...

  8. HDU-1532 Drainage Ditches (最大流,EK算法模板)

    题目大意:最大流的模板题...源点是0,汇点是n-1. 代码如下: # include<iostream> # include<cstdio> # include<cma ...

  9. POJ 1273 Drainage Ditches题解——S.B.S.

    Drainage Ditches Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 67823   Accepted: 2620 ...

随机推荐

  1. hdu 1200 To and Fro(简单模拟或DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1200 To and Fro Time Limit: 2000/1000 MS (Java/Others ...

  2. spring项目中web-inf下不能引用页面资源

    1.spring项目结构 2.spring结构说明 web-inf目录是不对外开放的,外部没办法直接访问到(即通过url访问),只有通过映射来访问,如映射一个action或servlet通过服务器端跳 ...

  3. python中range函数与列表中删除元素

    一.range函数使用 range(1,5)   代表从1到4(不包含5),结果为:1,2,3,4   ,默认步长为1 range(1,5,2)   结果为:1, 3  (同样不包含5) ,步长为2 ...

  4. SQL Workbench/J

    最近测试segment, 使用了一个新的DB--SQL Workbench/J, 参考文档:http://docs.aws.amazon.com/redshift/latest/mgmt/connec ...

  5. Unix/Linux Command Reference

  6. mysql 复制表结构 / 从结果中导入数据到新表

    这只会复制结构: mysql> create table a like mysql1; Query OK, 0 rows affected (0.03 sec) mysql> desc a ...

  7. bugku逗号过滤注入

    URL:http://120.24.86.145:8002/web15/ 直接给出了源码: <?php error_reporting(0); function getIp(){ $ip = ' ...

  8. 函数导出在kvm_intel.ko,kvm.ko不共享

    KVM一共包含了三个内核模块,kvm_intel.ko,kvm_amd.ko,kvm.ko.其中两个重要文件x86.c和vmx.c在编译后分别会生成kvm_intel.ko和kvm.ko两个内核模块, ...

  9. web.py输出中文字符串乱码问题的解决

    web.py中文字符串网页显示乱码的解决 #!/usr/bin/env python # encoding: utf-8 import weburls = ( '/', 'index')class i ...

  10. http状态码+http请求方式

    一.http状态码 2开头 (请求成功)表示成功处理了请求的状态代码. 200   (成功)  服务器已成功处理了请求. 通常,这表示服务器提供了请求的网页. 201   (已创建)  请求成功并且服 ...