博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最大流量dinci模板
阅读量:7094 次
发布时间:2019-06-28

本文共 1405 字,大约阅读时间需要 4 分钟。

我们知道。增广路径EK时间是在充电算法的O(n*m^2)。找到最短增广路径的时间复杂度为O(m*n^2)。这样的时间复杂度主要是寻找扩充道路。

这里也有一个演示Dinci算法,使用BFS层次结构图,然后DFS增强。

#include 
#include
#include
#include
#include
#include
#include
using namespace std;#define Del(a,b) memset(a,b,sizeof(a))const int N = 1000;const int INF = 0x3f3f3f3f;struct Edge{ int from,to,cap,flow;};struct Dinic{ int n,m,s,t; vector
edges; vector
G[N]; bool vis[N]; int d[N],cur[N]; void init(int n) { this->n=n; for(int i=0;i<=n;i++)G[i].clear(); edges.clear(); } void AddEdge(int from,int to,int cap){ //建边 edges.push_back((Edge){from,to,cap,0}); edges.push_back((Edge){to,from,0,0}); m=edges.size(); G[from].push_back(m-2); G[to].push_back(m-1); } bool BFS() { Del(vis,0); queue
q; q.push(s); d[s]=0; vis[s]=1; while(!q.empty()) { int x=q.front();q.pop(); for(int i=0;i
e.flow) { vis[e.to]=1; d[e.to]=d[x]+1; q.push(e.to); } } } return vis[t]; } int DFS(int x,int a) { if(x==t || a==0) return a; int flow=0,f; for(int& i=cur[x];i
0) { e.flow+=f; edges[G[x][i]^1].flow -= f; flow+=f; a-=f; if(a==0) break; } } return flow; } int max_flow(int s,int t) { this->s=s;this->t=t; int flow=0; while(BFS()) { Del(cur,0); flow+=DFS(s,INF); } return flow; }};Dinic solve;int main(){ int n,m; while(~scanf("%d%d",&m,&n)) { solve.init(n); for(int i=0; i

版权声明:本文博客原创文章。博客,未经同意,不得转载。

你可能感兴趣的文章
Maven属性(properties)标签的使用
查看>>
闲谈CDN网络架构
查看>>
dispatchEvent发送事件
查看>>
Java程序员金三银四精心准备的面试题及答案(基础篇)
查看>>
FileInputStreamTest
查看>>
u-boot 之配置分析 (2)
查看>>
对抗海量表格数据,【华为2012实验室】没有选择复仇者联盟
查看>>
JavaScript高级程序设计:第一章
查看>>
基础才是重中之重~你是否真正了解TransactionScope?
查看>>
JS~模拟表单在新窗口打开,避免广告拦截
查看>>
ANSI最全介绍linux终端字体改变颜色等
查看>>
数据结构5——堆
查看>>
11Linux_sshd_Apache
查看>>
Android hdpi ldpi mdpi xhdpi xxhdpi适配详解
查看>>
Java_4.1 猜数字游戏
查看>>
Openstack的mysql数据多主galera的错误
查看>>
文件关联程序
查看>>
归并排序、堆排序与快速排序分析(2)
查看>>
CodeForces 567C Geometric Progression
查看>>
xfreerdp的用法
查看>>