这道题可以算是例题了。

求解最大流,采用EK算法,用广搜查找增广路径,找到后更新网络流矩阵,循环执行直至找不到增广路径为止。这里要小心的是重复边的情况。

程序也是参照了网上的模版来写的,有一些技巧。如果完全让我自己来实现这个算法,会写的比较难看。还是too young

#include <iostream>
#include <queue>
using namespace std; const int MAX_N = ;
const int INF = INT_MAX; int n, m;int flow[MAX_N][MAX_N];
int cap[MAX_N][MAX_N];
int sum;
int pre[MAX_N];
int a[MAX_N]; void Edomds_Karp()
{
while (){
memset(a, , sizeof(a));
a[s] = INF;
queue<int> Q;
Q.push(1);
while (!Q.empty()){
int u = Q.front();
Q.pop();
for (int v = ; v <= m; v++){
if (!a[v] && flow[u][v] < cap[u][v]){
Q.push(v);
int tmp = cap[u][v] - flow[u][v];
a[v] = a[u] > tmp ? tmp : a[u];
pre[v] = u;
}
}
}
if (a[m] == ){
break;
}
sum += a[m];
for (int i = m; i != s; i = pre[i]){
flow[pre[i]][i] += a[m];
flow[i][pre[i]] -= a[m];
}
}
} int main()
{
while (cin >> n >> m){
memset(flow, , sizeof(flow));
memset(cap, , sizeof(cap));
sum = ;
for (int i = ; i <= n; i++){
int s, e, c;
cin >> s >> e >> c;
cap[s][e] += c;
}
Edomds_Karp();
cout << sum << endl;
}
return ;
}

poj1273(Edmonds-Karp)的更多相关文章

  1. 最大流算法之Ford-Fulkerson算法与Edmonds–Karp算法

    引子 曾经很多次看过最大流的模板,基础概念什么的也看了很多遍.也曾经用过强者同学的板子,然而却一直不会网络流.虽然曾经尝试过写,然而即使最简单的一种算法也没有写成功过,然后对着强者大神的代码一点一点的 ...

  2. 网络流(一)——Edmonds Karp算法

    首先是一些关于网络流的术语: 源点:即图的起点. 汇点:即图的终点. 容量:有向边(u,v)允许通过的最大流量. 增广路:一条合法的从源点流向汇点的路径. 网络流问题是在图上进行解决的,我们通常可以将 ...

  3. 全局最小割Stoer-Wagner算法

    借鉴:http://blog.kongfy.com/2015/02/kargermincut/ 提到无向图的最小割问题,首先想到的就是Ford-Fulkerson算法解s-t最小割,通过Edmonds ...

  4. [Algorithm] Maximum Flow

    Ref MIT: lecture-13-incremental-improvement-max-flow-min-cut/ Ford Fulkerson algorithm for finding m ...

  5. poj 1273 Drainage Ditches(最大流,E-K算法)

    一.Description Every time it rains on Farmer John's fields, a pond forms over Bessie's favorite clove ...

  6. Jomoo的模板

    目录 1 杂类算法 1.1 快读模板 1.2 O(1) int64 乘法 2 图论算法 2.1 树类 - Trie 2.2 树类 - 并查集(NB version) 2.3 树类 - LCA 2.4 ...

  7. hdu1532 最大流板子题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1532 题目给出源点和漏点,还有一些边,要求源与漏之间的最大流,我采用了Edmonds Karp算法,该 ...

  8. Python小白的数学建模课-19.网络流优化问题

    流在生活中十分常见,例如交通系统中的人流.车流.物流,供水管网中的水流,金融系统中的现金流,网络中的信息流.网络流优化问题是基本的网络优化问题,应用非常广泛. 网络流优化问题最重要的指标是边的成本和容 ...

  9. [转]带花树,Edmonds's matching algorithm,一般图最大匹配

    看了两篇博客,觉得写得不错,便收藏之.. 首先是第一篇,转自某Final牛 带花树……其实这个算法很容易理解,但是实现起来非常奇葩(至少对我而言). 除了wiki和amber的程序我找到的资料看着都不 ...

  10. hdu2389二分图之Hopcroft Karp算法

    You're giving a party in the garden of your villa by the sea. The party is a huge success, and every ...

随机推荐

  1. element-UI 表单图片判空验证问题

    本文地址:http://www.cnblogs.com/veinyin/p/8567167.html  element-UI的表单验证似乎并没有覆盖到文件上传上面,当我们需要在表单里验证图片时,就会出 ...

  2. [NOIP2013提高&洛谷P1966]火柴排队 题解(树状数组求逆序对)

    [NOIP2013提高&洛谷P1966]火柴排队 Description 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相 ...

  3. HDU 1259 ZJUTACM

    解题报告:就用了一个swap函数就行了. #include<cstdio> #include<iostream> int main() { int x,y,T,n; scanf ...

  4. python 进程 线程 协程

    并发与并行:并行是指两个或者多个事件在同一时刻发生:而并发是指两个或多个事件在同一时间间隔内发生.在单核CPU下的多线程其实都只是并发,不是并行. 进程是系统资源分配的最小单位,进程的出现是为了更好的 ...

  5. std::max 错误

    Today I typed the following: int t = (std::max)(timeout, lagtime); Why did I put parentheses around ...

  6. scrapy 爬虫踩过的坑(II)

    同事写了个爬虫,逻辑上看着没什么问题,但是一直报错:Request url must be str or unicode…… 打印了一下url 和url 的类型,确实是 unicode 懵逼…… 打印 ...

  7. js数组排序 reverse()和sort()方法的使用

    WEB前端|js数组排序reverse()和sort()方法的使用,数组中已经存在两个可以直接用来重排序的方法:reverse()和sort(). reverse()方法会对反转数组项的顺序. var ...

  8. openjudge-NOI 2.5-1700 八皇后问题

    题目链接:http://noi.openjudge.cn/ch0205/1700/ 题解: 经典深搜题目…… #include<cstdio> ][]; int num; void pri ...

  9. 使用PyMongo访问需要认证的MongoDB

    Windows 10家庭中文版,Python 3.6.4,PyMongo 3.7.0,MongoDB 3.6.3,Scrapy 1.5.0, 前言 在Python中,使用PyMongo访问Mongod ...

  10. Codeforces 682C Alyona and the Tree (树上DFS+DP)

    题目链接:http://codeforces.com/problemset/problem/682/C 题目大意:取树上任意一个点v,若点v的子树中有一个点u使得dist(v,u)>a[u]那么 ...