模板题:洛谷p3376

题目大意:

给出一个网络图,以及其源点和汇点,求出其网络最大流。

基本思路:

套模板

EK的时间复杂度O(V*E^2)

EK算法思路: 
1.通过BFS拓展合法节点(每个节点在本次BFS中仅遍历一次),找到汇点,并记录每个节点的前面节点(pre)(若找不到增广路,算法结束) 
2.通过BFS的记录,从汇点回溯回源点,记录下每条弧流量的**最小值**minn, ans += minn(否则就会超出某条边的限制流量) 
3.将所有经过的边的流量减去minn,反向边加上minn 
4.重复上述步骤,直到找不到增广路,算法结束。

代码如下:

#include<iostream>
#include<string>
#include<queue>
#include<vector>
#include<stack>
#include<algorithm>
#include<cstdio>
#include<cmath>
#include<cstring> using namespace std; typedef long long ll;
const int inf = 0x3f3f3f3f;
const int maxn =10000+10;
int n,m,st,en;
struct Flow{
int st,en,num;
}flow[200000+10];
vector<int>gra[maxn];
bool vis[maxn];
int pre[maxn];
bool bfs(){
memset(vis,false,sizeof(vis));
vis[st]=true;
queue<int>q;
q.push(st);
while(!q.empty()){
int qf=q.front();
q.pop();
int sz=gra[qf].size();
for(int i=0;i<sz;i++){
int id=gra[qf][i];
int v=flow[id].en;
if(flow[id].num>0&&!vis[v]){
vis[v]=true;
q.push(v);
pre[v]=id;
if(v==en){
return true;
}
}
}
}
return false;
}
int EK(){
int max_flow=0;
while(bfs()){
int _min=inf;
for(int i=en;i!=st;i=flow[pre[i]].st){
_min=min(_min,flow[pre[i]].num);
}
for(int i=en;i!=st;i=flow[pre[i]].st){
flow[pre[i]].num-=_min;
flow[pre[i]+m].num+=_min;
}
max_flow+=_min;
}
return max_flow;
}
int main(){
scanf("%d%d%d%d",&n,&m,&st,&en);
for(int i=0;i<m;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
flow[i].st=u;
flow[i].en=v;
flow[i].num=w;
flow[i+m].st=v;
flow[i+m].en=u;
flow[i+m].num=0;
gra[u].push_back(i);
gra[v].push_back(i+m);
}
printf("%d\n",EK());
return 0;
}

最大流的EK算法模板的更多相关文章

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

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

  2. HDU1532 网络流最大流【EK算法】(模板题)

    <题目链接> 题目大意: 一个农夫他家的农田每次下雨都会被淹,所以这个农夫就修建了排水系统,还聪明的给每个排水管道设置了最大流量:首先输入两个数n,m ;n为排水管道的数量,m为节点的数量 ...

  3. 【最大流之ek算法】HDU1532 求最大流

    本来是继续加强最短路的训练,但是遇到了一个最短路 + 最大流的问题,最大流什么鬼,昨天+今天学习了一下,应该对ek算法有所了解,凭借学习后的印象,自己完成并ac了这个最大流的模板题 题目大意:都是图论 ...

  4. HDU1532最大流 Edmonds-Karp,Dinic算法 模板

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

  5. EK算法模板

    #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> ...

  6. 网络流EK算法模板

    \(EK\)算法的思想就是每一次找一条增广路进行增广. 注意几个点: 存图时\(head\)数组要设为\(-1\). 存图的代码是这样的: inline void add(int u, int v, ...

  7. 最大流EK算法模板

    最近学了下最大流算法,大概思想算是懵懵懂懂了,现在想把模板记录下来,以备后面深刻学习之用. #include<cstdio> #include<cstring> using n ...

  8. POJ 1273 - Drainage Ditches - [最大流模板题] - [EK算法模板][Dinic算法模板 - 邻接表型]

    题目链接:http://poj.org/problem?id=1273 Time Limit: 1000MS Memory Limit: 10000K Description Every time i ...

  9. Poj(1459),最大流,EK算法

    题目链接:http://poj.org/problem?id=1459 Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Su ...

随机推荐

  1. python3修改文件指定行

    方法可以有三个,但其实是一个方法,因为不同的方法都是文件存储的方法,文件修改就只有一个方法: 将文件导入list后,重新写入文件(另一个文件或者当前文件) 1.当前文件读取后,list修改内容,写入另 ...

  2. springboot redis操作

    redis五大类型用法 Redis五大类型:字符串(String).哈希/散列/字典(Hash).列表(List).集合(Set).有序集合(sorted set)五种Controller:@Reso ...

  3. axios拦截器的使用方法

    很多时候我们需要在发送请求和响应数据的时候做一些页面处理,比如在请求服务器之前先判断以下用户是登录(通过token判断),或者设置请求头header,或者在请求到数据之前页面显示loading等等,还 ...

  4. ceph-状态监测-脚本

    http://www.tang-lei.com/2018/06/05/ceph-%E7%8A%B6%E6%80%81%E7%9B%91%E6%B5%8B-%E8%84%9A%E6%9C%AC/ 为了能 ...

  5. commons-fileupload-1.2.1.jar 插件上传与下载

    1:首先在页面上写个文本域: <%@ page language="java" import="java.util.*" pageEncoding=&qu ...

  6. linux网络接口,struct ifreq struct ifconf结构

    网络相关的ioctl请求的request参数及arg地址必须指向的数据类型如下表所示: 接口 SIOCGIFCONF SIOCSIFADDR SIOCGIFADDR SIOCSIFBRDADDR SI ...

  7. speike

    speike 题目描述 众所周知,Speike 狗是一条特别喜欢追着Tom 打的狗. 现在,Tom 又把Speike 惹生气了,现在Speike 需要跨越千山万水找Tom 报仇. Speike 所在的 ...

  8. python中的Nonetype

    在python中的None的类型是Nonetype, 嗯,看清楚了吧,None是值,Nonetype是类型.同理,数字1是值,int是类型.注意:在python中是没有Null的,取而代之的是None

  9. Java JsonPath grab InvalidPathException in code, you must be catching Java 7's java.nio.file.InvalidPathException instead of JsonPath's com.jayway.jsonpath.InvalidPathExceptio

    I am using JsonPath and am able to parse my data and get the values when the path provided is correc ...

  10. English-accomplish、complete、finish、achieve and fulfill

    accomplish to succeed in doing something, especially after trying very hard vt. 完成:实现:达到 complete us ...