自己yy的fulkson最大流算法
#include <iostream>
#include <cstdio>
#include <vector> using namespace std;
const int maxn=1e3+;
//maxn means the max
const int INF=~0u>>;
struct node{
int to,cap,rev;
node(int _to,int _cap,int _rev):to(_to),cap(_cap),rev(_rev){}
};
vector<node> edge[maxn];
bool vis[maxn];
void add(int from,int to,int cap){
edge[from].push_back(node(to,cap,edge[to].size()));
edge[to].push_back(node(from,,edge[from].size()-));
} //dfs 小心爆int
int dfs(int v,int t,int f){
if(v==t) return f;
int i;
for(i=;i<edge[v].size();++i){
int p=edge[v][i].to;
if(!vis[p]&&edge[v][i].cap>){
vis[p]=true;
int flow=edge[v][i].cap;
int d=dfs(p,t,min(flow,f));
if(d>){
edge[v][i].cap-=d;
edge[p][edge[v][i].rev].cap+=d;
return d;
}
//vis[p]=false;//这里丢了
//如果加上了对流量大于零的判断我们
//完全可以不写这一句
}
}
return ;
}
int maxflow(int s,int t){
int flow=;
for(;;){
memset(vis,,sizeof(vis));//这里丢了
vis[s]=true;//这里丢了
int f=dfs(s,t,INF);
if(f==) break;
flow+=f;
}
return flow;
}
int n,s,t;
void print(){
int i,j;
//这样写必须保证s<=t
for(i=s;i<=t;++i){
printf("head:%d",i);
for(j=;j<edge[i].size();++j){
node t=edge[i][j];
printf("==>(%d,%d,%d)",t.to,t.cap,t.rev);
}
printf("\n");
}
}
int main(){
// printf("INF:%d\n",INF);
scanf("%d",&n);
//输入的有向边数量
scanf("%d%d",&s,&t);
int i,u,v,cap;
for(i=;i<n;++i){
scanf("%d%d%d",&u,&v,&cap);
add(u,v,cap);
}
print();
int mx=maxflow(s,t);
printf("==============\n");
print();
printf("maxflow:%d\n",mx);
return ;
}
自己yy的fulkson最大流算法的更多相关文章
- Ford-Fulkerson 最大流算法
流网络(Flow Networks)指的是一个有向图 G = (V, E),其中每条边 (u, v) ∈ E 均有一非负容量 c(u, v) ≥ 0.如果 (u, v) ∉ E 则可以规定 c(u, ...
- 算法9-5:最大流算法的Java代码
残留网络 在介绍最大流算法之前先介绍一下什么是残留网络.残余网络的概念有点类似于集合中的补集概念. 下图是残余网络的样例. 上面的网络是原始网络.以下的网络是计算出的残留网络.残留网络的作用就是用来描 ...
- 海量数据挖掘MMDS week3:流算法Stream Algorithms
http://blog.csdn.net/pipisorry/article/details/49183379 海量数据挖掘Mining Massive Datasets(MMDs) -Jure Le ...
- 基于.net的分布式系统限流组件(限流算法:令牌算法和漏斗算法)
转载链接:https://www.cnblogs.com/vveiliang/p/9049393.html 1.令牌桶算法 令牌桶算法是比较常见的限流算法之一,大概描述如下: 1).所有的请求在处理之 ...
- 最大流算法-ISAP
引入 最大流算法分为两类,一种是增广路算法,一种是预留推进算法.增广路算法包括时间复杂度\(O(nm^2)\)的EK算法,上界为\(O(n^2m)\)的Dinic算法,以及一些其他的算法.EK算法直接 ...
- 常用限流算法与Guava RateLimiter源码解析
在分布式系统中,应对高并发访问时,缓存.限流.降级是保护系统正常运行的常用方法.当请求量突发暴涨时,如果不加以限制访问,则可能导致整个系统崩溃,服务不可用.同时有一些业务场景,比如短信验证码,或者其它 ...
- Cable TV Network 顶点连通度 (最大流算法)
Cable TV Network 题目抽象:给出含有n个点顶点的无向图,给出m条边.求定点联通度 K 算法:将每个顶点v拆成 v' v'' ,v'-->v''的容量为1. ...
- 最大流算法(Edmons-Karp + Dinic 比较) + Ford-Fulkson 简要证明
Ford-Fulkson用EK实现:483ms #include <cstdio> #include <cstring> #define min(x,y) (x>y?y: ...
- 最大流算法----(SAP 和 EK)
EK算法的核心 反复寻找源点 s 到汇点 t 之间的增广路径,若有,找出增广路径上每一段的最小值delta,若无,则结束. 寻找增广路径时用BFS来找,并且更新残留网的值. 找到delta后,则使最大 ...
随机推荐
- 数位DP题目汇总
Google Code Jam 2014 Round 1B Problem B hdu 2089 hdu 3555 uestc 250 (原1307) hdu 3652 hdu 3709 Light ...
- Java for LeetCode 234 Palindrome Linked List
解题思路: O(1)的空间复杂度,意味着不能通过开一个List来解决问题.我们可以把List分成前后两个部分,后半部分通过指针的相互赋值进行翻转即可. JAVA实现如下: public static ...
- nyoj202_红黑树_中序遍历
红黑树 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 什么是红黑树呢?顾名思义,跟枣树类似,红黑树是一种叶子是黑色果子是红色的树... 当然,这个是我说的... & ...
- css 命名规范
网站头部: head/header(头部) top(顶部) 导航: nanv 导航具体区分:topnav(顶部导航).mainnav(主导航).mininav(迷你导航).textna ...
- linux 增加用户 useradd 用法小结及配置文件说明
转自CSDN,http://blog.csdn.net/warden2010/article/details/5132290,谢谢作者 在Linux 系统中,所有的用户和组像一个国家.如果国家要繁荣昌 ...
- js判断手机端操作系统(Andorid/IOS),并自动为链接添加相应下载地址
<script type="text/javascript"> $(document).ready(function(e) { var u = navigator.us ...
- eclipse的使用一
The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files ...
- 添加thrust的库后出错
在添加thrust库中的host_vector.h等头文件时 C:\NVIDIA\cudatoolkit\include\thrust\detail\config中的debug.h一直出问题,因此注释 ...
- strlen与sizeof
strlen计算不包括终止符null字节的字符串长度,而sizeof则计算包括终止null字节的长度.另一个差别,strlen需要一次函数调用,而sizeof在编译时计算缓冲区长度.
- 一个简单的jsp+servlet实例,实现简单的登录
开发环境myeclipse+tomcat6 1.先创建web project,项目名为RegisterSystem, 2.在WebRoot 目录下创建login.jsp文件,只需修改body中的内容, ...