//非当前弧优化版
#include <iostream>
#include <cstdio>
#include <math.h>
#include <cstring>
#include <queue>
#define INF 0x3f3f3f3f
using namespace std;
int tab[250][250];//邻接矩阵
int dis[250];//距源点距离,分层图
int N,M;//N:点数;M,边数
queue<int> Q;
int BFS()
{memset(dis,0xff,sizeof(dis));//以-1填充dis[1]=0;Q.push(1);while (Q.size()){int head=Q.front();Q.pop();for (int i=1; i<=N; i++)if (dis[i]<0 && tab[head][i]>0){dis[i]=dis[head]+1;Q.push(i);}}if (dis[N]>0) return 1;else return 0;//汇点的DIS小于零,表明BFS不到汇点
}
//dfs代表一次增广,函数返回本次增广的流量,返回0表示无法增广
int dfs(int x,int low)//Low是源点到现在最窄的(剩余流量最小)的边的剩余流量
{int a=0;if (x==N)return low;//是汇点for (int i=1; i<=N; i++)if (tab[x][i] >0 //联通&& dis[i]==dis[x]+1 //是分层图的下一层&&(a=dfs(i,min(low,tab[x][i]))))//能到汇点(a != 0){tab[x][i]-=a;tab[i][x]+=a;return a;}return 0;}
int dinic()
{int ans=0,tans;while (BFS())//要不停地建立分层图,如果BFS不到汇点才结束{while(tans=dfs(1,0x7fffffff))ans+=tans;//一次BFS要不停地找增广路,直到找不到为止}return ans;
}
int main()
{int i,j,f,t,flow,tans;while (scanf("%d%d",&M,&N)!=EOF){memset(tab,0,sizeof(tab));for (i=1; i<=M; i++){scanf("%d%d%d",&f,&t,&flow);tab[f][t]+=flow;}printf("%d\n",dinic());}
}
//当前弧优化版
#include <iostream>
#include <cstdio>
#include <math.h>
#include <cstring>
#include <queue>
#define INF 0x3f3f3f3f
using namespace std;
int tab[250][250];//邻接矩阵
int dis[250];//距源点距离,分层图
int cur[280]; //当前弧优化
int N,M;//N:点数;M,边数
queue<int> Q;
int BFS()
{memset(dis,0xff,sizeof(dis));//以-1填充dis[1]=0;Q.push(1);while (Q.size()){int head=Q.front();Q.pop();for (int i=1; i<=N; i++)if (dis[i]<0 && tab[head][i]>0){dis[i]=dis[head]+1;Q.push(i);}}if (dis[N]>0) return 1;else return 0;//汇点的DIS小于零,表明BFS不到汇点
}
//dfs代表一次增广,函数返回本次增广的流量,返回0表示无法增广
int dfs(int x,int low)//Low是源点到现在最窄的(剩余流量最小)的边的剩余流量
{int a=0;if (x==N)return low;//是汇点for (int &i=cur[x]; i<=N; i++)if (tab[x][i] >0 //联通&& dis[i]==dis[x]+1 //是分层图的下一层&&(a=dfs(i,min(low,tab[x][i]))))//能到汇点(a != 0){tab[x][i]-=a;tab[i][x]+=a;return a;}return 0;}
int dinic()
{int ans=0,tans;while (BFS())//要不停地建立分层图,如果BFS不到汇点才结束{for(int i=1;i<=N;i++)cur[i]=1;while(tans=dfs(1,0x7fffffff))ans+=tans;//一次BFS要不停地找增广路,直到找不到为止}return ans;
}
int main()
{int i,j,f,t,flow,tans;while (scanf("%d%d",&M,&N)!=EOF){memset(tab,0,sizeof(tab));for (i=1; i<=M; i++){scanf("%d%d%d",&f,&t,&flow);tab[f][t]+=flow;}printf("%d\n",dinic());}
}

网络流--最大流--Dinic模板矩阵版(当前弧优化+非当前弧优化)相关推荐

  1. 图论 —— 网络流 —— 最大流 —— Dinic 算法

    [概述] Dinic 算法在 EK 算法的基础上进行了优化,其时间复杂度为 O(n*n*m). Dinic 在找增广路的时也是找最短增广路, 但与 EK 算法不同的是 Dinic 算法并不是每次 bf ...

  2. hdu4280 Island Transport 网络流最大流 Dinic算法高效模板

    Island Transport In the vast waters far far away, there are many islands. People are living on the i ...

  3. 网络流-最大流 dinic+当前弧优化(模板)

    用法:在原有向图的基础上,增加源点s和汇点t,并将s与左子集建边,t与右子集建边: 边权都设为1,则就是求二分图最大匹配 右子集与t的边权大于1,则就是求二分图最大多重匹配 模板代码: const i ...

  4. 网络流最大流 Dinic算法模板

    Dinic算法跟EK算法的优化地方就在于,EK是每次bfs记录前驱结点,然后从汇点找到一条回到源点的路. 而dinic是bfs记录深度,不断从源点dfs到汇点并且更新路径流量,直到dfs不到汇点. 邻 ...

  5. UESTC 1143 数据传输 网络流 最大流 Dinic

    数据传输 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit  Sta ...

  6. (通俗易懂小白入门)网络流最大流——EK算法

    网络流 网络流是模仿水流解决生活中类似问题的一种方法策略,来看这么一个问题,有一个自来水厂S,它要向目标T提供水量,从S出发有不确定数量和方向的水管,它可能直接到达T或者经过更多的节点的中转,目前确定 ...

  7. 网络流最大流(FF、Dinic)详解

    网络流24题题解戳这里~ 网络流基础概念 考虑这幅图,你可以看成从村庄s到村庄t有很多条物流道路,每个点都是个中转结点,每条路的权值即该条路最多能运送的货物 介绍一些基本概念: 网络:一个入度为0的点 ...

  8. 最大流算法模板:EK和dinic算法

    最大流算法模板:EK和dinic算法 一.EK算法模板 #include<iostream> #include<queue> using namespace std; cons ...

  9. 网络流 费用流 模板 ISAP+SPFA+ZKW

    2020年4月20日重新发布.7年前的文章,几年前CSDN改版的时候变成了私密--重新发一下吧. 关于费用流ZKW算法的讲解:从入门到精通: 最小费用流的"zkw算法" 关于Din ...

最新文章

  1. 温水里的程序员,技术将淘汰一切。
  2. 打家劫舍(不偷相邻)
  3. MySQL 清理slowlog方法
  4. ITK:计算图像谱密度
  5. 如何使用RichEdit
  6. Html5 Canvas斗地主游戏
  7. windows中当你的键盘无法使用时我们可以用另一种方法哦
  8. hive内置函数详解
  9. PHP spl_autoload_register()函数使用
  10. 通俗的解释交叉熵与相对熵
  11. portal认证 只能重定向80和443请求_华为防火墙内置Portal认证报文交互
  12. python学习笔记--python简介
  13. C# Winform开发教程
  14. 中国网络安全企业50强
  15. 【商业】梳理你的商业模式
  16. 服务器2016自动备份怎么取消,wps中ppt的制作怎样取消掉定时自动备份
  17. Spring MVC 项目中配置log4j 出现错误log4j:ERROR Failed to excute sql com.mysql.jdbc.exceptions.jdbc4.MySQLSynt
  18. 关于Mysql 的时区问题
  19. uniapp 实现销售订单页面-风格1
  20. linux进程的软中断通信del,linux进程的软中断通信

热门文章

  1. html怎么一段时间把网页背景更换_复盛螺杆压缩机故障怎么维修?
  2. Android Github 资源目录
  3. 一个比较方便的转换NSString为UTF8编码的函数
  4. iOS-raywenderlich翻译-AFNetworking速成教程
  5. douchat 4.0 新版发布,助力小程序后台开发
  6. [UWP]依赖属性2:使用依赖属性
  7. 《当90后遇上创业》导读
  8. Gstreamer编程
  9. 关于eclipse解压安装的问题
  10. 重新想象 Windows 8 Store Apps (59) - 锁屏