模板题:洛谷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. CentOS7安装配置redis5.0.5

    一.安装必需包gcc yum install gcc 二.下载redis,并解压 wget http://download.redis.io/releases/redis-5.0.5.tar.gz t ...

  2. Java反射学习-1 - 反射获取类的属性,方法,构造器

    新建一个Person类 package cn.tx.reflect; /** * 注解初步了解 * @author Administrator * */ public class Person { p ...

  3. webpack使用的补充

    1.分离生产环境和开发环境的wepack.config.js 我们可以将生产环境和开发环境中的配置分离为两个不同的文件,并且还维护一个共同的配置文件 common,可以通过 webpack.merge ...

  4. 【CF1256】Codeforces Round #598 (Div. 3) 【思维+贪心+DP】

    https://codeforces.com/contest/1256 A:Payment Without Change[思维] 题意:给你a个价值n的物品和b个价值1的物品,问是否存在取物方案使得价 ...

  5. ARM架构授权和IP核授权有什么不一样啊?

    比如,华为分别拿到这2个授权,能做的有什么区别啊? 匿名 | 浏览 2976 次 推荐于2016-06-09 02:43:35   最佳答案   一个公司若想使用ARM的内核来做自己的处理器,比如苹果 ...

  6. docstoc对Scribd的威胁比SlideShare还要大。

    docstoc,这是在TechCrunch40互联网交流会上崭露头角的个性化服务.docstoc为用户提供了在线存储.分享以及交流文档的互联网服务.与Scribd相同的是,除了文档分享功能以外,doc ...

  7. 建站手册-浏览器信息:Mozilla 项目

    ylbtech-建站手册-浏览器信息:Mozilla 项目 1.返回顶部 1. http://www.w3school.com.cn/browsers/browsers_mozilla.asp 2. ...

  8. 记录一些比较长的adb命令,复制用

    adb shell content query --uri content://settings/secure --projection value --where "name=\'andr ...

  9. Chrome 强行修改配置

    大约有两个月没写了,一是最近这两个月还挺忙,更重要的是也没有遇到什么好玩的,或者是要记录的,今天无意间遇到一个非技术问题:Chrome设置的问题. 问题描述: chrome 在下载文件时,默认情况下是 ...

  10. selenium,webdriver 执行js语句 对象是百度

    代码要多敲 注释要清晰 最后的两种方法,没有实现我想要的结果 有知道的朋友,给我留言吧 #执行js语句 from selenium import webdriver import time #生成浏览 ...