网络流(dinic)
2016-01-26 08:41
543 查看
传说有一个EK算法,时间复杂度是O(n*m^2)的,我想学这个,然后被大家给阻止了,因为有一个比较棒的dinic算法,时间复杂度是O(n^2*m)的。
网络流大概是这样的问题:
一个水的发源点S(可以提供无限量的水),一个汇集点T,水从发源点要流过许多容量一定的管道后,最后回到汇集点,求最大能流多少水。
想一想也知道,最大流量跟管子的容量肯定有关,并且想达到最大能流的水量,必然有某几个管道已经里面装满了水。
引入概念:
容量网络:图G(V,E)为有向网络,在V中指定一个源点和一个汇点,流量从源点出发经过有向网络流向汇点。对于每一条有向边有权值C,称作弧的容量。有向边称为弧。这样的有向网络称为容量网络。(可以粗略理解为现在我们面临的处境(问题描述))
残留网络:假设一条边容量为A,流量为B,那残余容量就是A-B,而以残余容量为边的有向网络就是残留网络。
饱和:容量等于流量。
零流:流量为0.
前(后)向弧:在S—-T的路径上与路径相同(反)的有向边。
增广路:就是S—-T的一条可以扩充流量的路径。(也就是说前向弧)
模版大概是这样:
网络流大概是这样的问题:
一个水的发源点S(可以提供无限量的水),一个汇集点T,水从发源点要流过许多容量一定的管道后,最后回到汇集点,求最大能流多少水。
想一想也知道,最大流量跟管子的容量肯定有关,并且想达到最大能流的水量,必然有某几个管道已经里面装满了水。
引入概念:
容量网络:图G(V,E)为有向网络,在V中指定一个源点和一个汇点,流量从源点出发经过有向网络流向汇点。对于每一条有向边有权值C,称作弧的容量。有向边称为弧。这样的有向网络称为容量网络。(可以粗略理解为现在我们面临的处境(问题描述))
残留网络:假设一条边容量为A,流量为B,那残余容量就是A-B,而以残余容量为边的有向网络就是残留网络。
饱和:容量等于流量。
零流:流量为0.
前(后)向弧:在S—-T的路径上与路径相同(反)的有向边。
增广路:就是S—-T的一条可以扩充流量的路径。(也就是说前向弧)
模版大概是这样:
bool bfs(){ int h = 1, t = 1;CLR(dep,-1); dep[q[1] = S ] = 0; while(h <= t){int x = q[h ++ ] ;RepG(i,x)if(fl && dep[v] == -1)dep[q[++ t] = v] = dep[x] + 1;} return dep[T] > 0; } int dfs(int x,int f){ if(x == T)return f; int s = 0,ff; RepG(i,x)if(f && fl && dep[v] = dep[x] + 1 && (ff = dfs(v,min (fl,f))))s += ff, fl -= ff,vfl += ff,f -= ff; if(!s)dep[x] = -1; return s; } void save(int u,int vv,int f){edge[cnt].f = f;edge[cnt].next = head[u];edge[cnt].to = vv;head[u] = cnt ++;} int maxflow(){int s = 0 ; for(;bfs();s += dfs(S,inf));return s;}
相关文章推荐
- 升级 TCP 协议将使网速提升30%,中国受益尤为明显
- 运维小知识之nginx---..nginx-sticky-module-1.1ngx_http_sticky_misc.cIn function ‘ngx_http_sticky_misc_text_
- AsyncTask异步任务学习笔记(一、异步任务加载网络图片(多图))
- AngualrJS中每次$http请求时的一个遮罩层Directive
- Android 发送http请求实例
- LAMP环境由http转到https
- 解决android 6.0(api 23) SDK,不再提供org.apache.http.*
- TCP UDP HTTP
- 网络字节序和本地字节序的理解和实现
- SIM808 执行HTTP POST 例程【全网首发】
- TCP连接——爱的传声筒
- TCP/IP协议详解——邮差与邮局
- 图解TCP-IP协议
- HTTP协议是什么
- Win7+VMware Workstation环境下的CentOS-Linux网络连接设置
- Xcode7使用NSURLSession发送HTTP请求报错
- 网络加载糗事百科json数据实践
- imx6q 网络调试方式汇总
- Mininet 自定义网络拓扑
- http调试工具Charles Proxy用法详解