最大网络流模板Dinic算法
来源:互联网 发布:onelife维卡币软件下载 编辑:程序博客网 时间:2024/05/19 14:19
#include <iostream> #include <queue> #include <vector> #include <algorithm> #include <deque> using namespace std;#define INFINITE 999999999 //Poj 1273 Drainage Ditches 的 Dinic算法int G[300][300];bool Visited[300];int Layer[300]; int n,m; //1是源点,m是汇点bool CountLayer() { int layer = 0; deque<int>q; memset(Layer,0xff,sizeof(Layer));//都初始化成-1 Layer[1] = 0; q.push_back(1); while( ! q.empty()) { int v = q.front(); q.pop_front(); for( int j = 1; j <= m; j ++ ) { if( G[v][j] > 0 && Layer[j] == -1 ) { //Layer[j] == -1 说明j还没有访问过 Layer[j] = Layer[v] + 1; if( j == m ) //分层到汇点即可 return true; else q.push_back(j); } } } return false;}int Dinic(){ int i; int s; int nMaxFlow = 0; deque<int> q;//DFS用的栈 while( CountLayer() ) { //只要能分层 q.push_back(1); //源点入栈 memset(Visited,0,sizeof(Visited)); Visited[1] = 1; while( !q.empty()) { int nd = q.back(); if( nd == m ) { // nd是汇点 //在栈中找容量最小边 int nMinC = INFINITE; int nMinC_vs; //容量最小边的起点 for( i = 1;i < q.size(); i ++ ) { int vs = q[i-1]; int ve = q[i]; if( G[vs][ve] > 0 ) { if( nMinC > G[vs][ve] ) { nMinC = G[vs][ve]; nMinC_vs = vs; } } } //增广,改图 nMaxFlow += nMinC; for( i = 1;i < q.size(); i ++ ) { int vs = q[i-1]; int ve = q[i]; G[vs][ve] -= nMinC; //修改边容量 G[ve][vs] += nMinC; //添加反向边 } //退栈到 nMinC_vs成为栈顶,以便继续dfs while( !q.empty() && q.back() != nMinC_vs ) { Visited[q.back()] = 0; //没有这个应该也对 q.pop_back(); } } else { //nd不是汇点 for( i = 1;i <= m; i ++ ) { if( G[nd][i] > 0 && Layer[i] == Layer[nd] + 1 && ! Visited[i]) { //只往下一层的没有走过的节点走 Visited[i] = 1; q.push_back(i); break; } } if( i > m) //找不到下一个点 q.pop_back(); //回溯 } } } return nMaxFlow;}int main(){ while (cin >> n >> m ) { int i,j,k; int s,e,c; memset( G,0,sizeof(G)); for( i = 0;i < n;i ++ ) { cin >> s >> e >> c; G[s][e] += c; //两点之间可能有多条边 } cout << Dinic() << endl; } return 0;}
模板来自
网络流算法
北京大学信息学院 郭炜
阅读全文
0 0
- Dinic算法 P3376 【模板】网络最大流
- 最大网络流模板Dinic算法
- 【网络流算法模板】最大流:dinic模板
- 网络流模板:最大流ISAP算法和Dinic算法
- 网络流模板:最大流ISAP算法和Dinic算法
- 最大流 dinic算法模板
- 最大流 dinic算法 模板
- 网络流 Dinic算法求最大流模板
- 网络流最大流之Dinic算法模板
- hdu4280 Island Transport (网络流最大流)&(dinic算法模板)
- 最大网络流Dinic算法
- 网络最大流 dinic算法
- 网络最大流(dinic)【模板】
- 网络最大流之dinic模板
- 网络最大流(dinic)模板
- 【模板】网络最大流 (Dinic)
- 【模板】Dinic求网络最大流
- poj 1273最大流dinic算法模板
- 【实用】一个老赖的自白:我是怎么欺骗信贷员的! vs 如何预防老赖骗贷
- C#获取外网IP和地理位置(确保可用)
- 关于sql中的规范化理论
- css3简单实现火焰效果
- 时间控件之WdatePicker
- 最大网络流模板Dinic算法
- STM32之NVIC的深入详解
- Windows Server部署.net Core应用
- Linux下Git安装及配置
- MyBatis insert、update、delete、sql 标签
- 汇编语言 第三版 王爽 实验七 独立完成
- 实时视频传输的关键技术 H.264 全解析
- 期刊发表价格需要多少
- jQuery easyUI中表格的跨行跨列