hdu3549 求最大流果题

ek算法 先bfs出一条流 然后通过不断地添加增广路 得到最大流(证明在算法书上都有)

增加了一个流 就加反向边 允许程序通过走方向边的方式进行“回滚”

i^1 = i+1(i为奇数), i^1 = i-1(i为偶数)这样偶数位置放正边 奇数位置放反边 就可以快速找到边的逆边

pre记录路径 具体是pre存到达当前点的边的序号

pre还顺便可以记录点的访问情况 省去了一个vis数组

每次bfs找到增广路径之后 从终点找到起点 找出最小的边权 就是这次增广增加的流

这个思路是ff方法 用bfs找增广路就是ek算法

O(VE^2) 多半歇逼

就这些

#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
const int maxn = , maxm = , inf = 0x3f3f3f3f;
struct edge{
int u, v, w, nxt;
edge(){}
edge(int u, int v, int w, int nxt):u(u), v(v), w(w), nxt(nxt){}
}e[*maxm];
int cur, head[maxn], pre[maxn];
void addedge(int u, int v, int w){
e[cur] = edge(u, v, w, head[u]);
head[u] = cur++;
e[cur] = edge(v, u, , head[v]);
head[v] = cur++;
}
void init(){
cur = ;
memset(head, -, sizeof(head));
}
bool bfs(int st, int ed){
queue<int>Q;
memset(pre, -, sizeof(pre));
Q.push(st);
while(!Q.empty()){
int u = Q.front();
Q.pop();
if(u == ed)
return true;
for(int i = head[u]; ~i; i = e[i].nxt){
int v = e[i].v, w = e[i].w;
if(w && pre[v] == -){
pre[v] = i;
Q.push(v);
}
}
}
return false;
}
int ek(int st, int ed){
int ans = ;
while(bfs(st, ed)){
int tmp = ed, det = inf;
while(tmp != st){
int edges = pre[tmp];
det = min(det, e[edges].w);
tmp = e[edges].u;
}
tmp = ed;
while(tmp != st){
int edges = pre[tmp];
e[edges].w -= det;
e[edges^].w += det;
tmp = e[edges].u;
}
ans += det;
}
return ans;
}
int main(){
int t, kase = ;
scanf("%d", &t);
while(t--){
init();
int n, m;
scanf("%d%d", &n, &m);
while(m--){
int x, y, w;
scanf("%d%d%d", &x, &y, &w);
addedge(x, y, w);
}
printf("Case %d: ", ++kase);
printf("%d\n", ek(, n));
}
return ;
}

网络流 ek的更多相关文章

  1. 网络流EK

    #include <iostream> #include <queue> #include <string.h> #define MAX 302 using nam ...

  2. POJ 1459 网络流 EK算法

    题意: 2 1 1 2 (0,1)20 (1,0)10 (0)15 (1)20 2 1 1 2 表示 共有2个节点,生产能量的点1个,消耗能量的点1个, 传递能量的通道2条:(0,1)20 (1,0) ...

  3. 初涉网络流[EK&dinic]

    主要还是板子 Edmonds-Karp 从S开始bfs,直到找到一条到达T的路径后将该路径增广,并重复这一过程. 在处理过程中,为了应对“找到的一条路径把其他路径堵塞”的情况,采用了建反向弧的方式来实 ...

  4. 最大网络流 EK 算法

    网络流是什么类型的问题,看一道题目你就知道了 点击打开链接 . 默认具备图论的基本知识,网络流概念比较多,先看看书熟悉一下那些概念.比较好!一个寄出的网络最大流.EK算法写的. 这是一幅网络,求S   ...

  5. POJ1149_PIGS(网络流/EK)

    PIGS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 15721   Accepted: 7021 Description ...

  6. 网络流EK算法模板

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

  7. HDU1532 Drainage Ditches 网络流EK算法

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

  8. 2016计蒜之道复赛 菜鸟物流的运输网络 网络流EK

    题源:https://nanti.jisuanke.com/t/11215 分析:这题是一个比较经典的网络流模型.把中间节点当做源,两端节点当做汇,对节点进行拆点,做一个流量为 22 的流即可. 吐槽 ...

  9. POJ-3436 ACM Computer Factory(网络流EK)

    As you know, all the computers used for ACM contests must be identical, so the participants compete ...

随机推荐

  1. [译]Ocelot - Getting Started

    原文 Ocelot专为.NET Core而设计. .NET Core 2.1 安装 首先需要创建一个netstandard2.0项目,然后再通过nuget安装. Install-Package Oce ...

  2. js,jQuery获取html5的data-*属性

    今天做项目的时候发现一个坑,关于jQuery获取data-*属性的方法data(),特写此篇来记录. data-*自定义数据属性 HTML5规定可以为元素添加非标准型的属性,只需添加前缀data-,这 ...

  3. visual studio code运行时报错,Cannot find module 'webpack'

    前言 今天运行是visual studio code时,报了一个错误Cannot find module 'webpack' ,网上找了很多方法都没解决.下面一起来看看怎么解决 正文 报错: npm ...

  4. js的事件循环机制:同步与异步任务(setTimeout,setInterval)宏任务,微任务(Promise,process.nextTick)

    javascript是单线程,一切javascript版的"多线程"都是用单线程模拟出来的,通过事件循环(event loop)实现的异步. javascript事件循环 事件循环 ...

  5. 整理一下C++语言中的头文件

    对于每一个像我一样的蒟蒻来说,C++最重要的东西就是头文件的使用了.由于初学,直到现在我打代码还是靠一些事先写好的的头文件,仍然不能做到使用自己需要的.最近看了几位大佬打代码,心中突然闪过要把自己冗长 ...

  6. 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

    object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.object detection要解决的问题就是物体在哪里,是什么这整个流程的问题.然而,这个问题 ...

  7. python中的Iterable对象和Iterator

    参考链接:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143178254 ...

  8. codeforces 787D - Legacy 线段树优化建图,最短路

    题意: 有n个点,q个询问, 每次询问有一种操作. 操作1:u→[l,r](即u到l,l+1,l+2,...,r距离均为w)的距离为w: 操作2:[l,r]→u的距离为w 操作3:u到v的距离为w 最 ...

  9. 计算机基础 & python基础

    五大组成部分 控制器 运算器(数学运算+逻辑运算) 存储器(存取数据) 输入设备(键盘.鼠标等) 输出设备(显示器.打印机等) CPU CPU=运算器+控制器 CPU的分类: 精简指令集(RISC): ...

  10. Python开发【第十篇】:模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...