最大流Dinic

时间:2022-12-21 15:38:42

不断用BFS构造分层网络,用DFS增广。中途用取指的cur优化DFS。

Dinic封装模板:

 #include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <queue>
using namespace std;
typedef long long L;
const int maxn = + ;
const int maxm = + ;
const int INF = -1u >> ;
int fch[maxn], n, m;
L ans = ;
bool vis[maxn];
struct Tedge{
int from, to, cap, flow, next;
}adj[maxm];
struct Dinic{
int S, T, n, ms;
int d[maxn], cur[maxn], fch[maxn];
void init(int n){
this -> n = n;
memset(fch, -, sizeof(fch));
ms = ;
return ;
}
void AddEdge(int u, int v, int c){
adj[ms] = (Tedge){u, v, c, , fch[u]};
fch[u] = ms ++;
adj[ms] = (Tedge){v, u, , , fch[v]};
fch[v] = ms ++;
return ;
}
bool BFS(){
memset(vis, , sizeof(vis));
queue<int> Q;
Q.push(S); vis[S] = true; d[S] = ;
while(!Q.empty()){
int x = Q.front(); Q.pop();
for(int i = fch[x]; i != -; i = adj[i].next){
Tedge& e = adj[i];
if(!vis[e.to] && e.cap > e.flow){
vis[e.to] = true;
d[e.to] = d[x] + ;
Q.push(e.to);
}
}
}
return vis[T];
}
int DFS(int x, int a){
if(x == T || !a) return a;
int flow = , f;
for(int& i = cur[x]; i != -; i = adj[i].next){
Tedge& e = adj[i];
if(d[e.to] == d[x] + && (f = DFS(e.to, min(a, e.cap - e.flow))) > ){
flow += f;
a -= f;
e.flow += f;
adj[i ^ ].flow -= f;
if(!a) break;
}
}
return flow;
}
L Max_Flow(int S, int T){
this -> S = S;
this -> T = T;
L flow = ;
while(BFS()){
for(int i = ; i < n; i ++) cur[i] = fch[i];
flow += DFS(S, INF);
}
return flow;
}
}sol;
void read(int &x){
x = ; int sig = ; char ch = getchar();
while(!isdigit(ch)) { if(ch == '-') sig = -; ch = getchar(); }
while(isdigit(ch)) x = * x + ch - '', ch = getchar();
x *= sig; return ;
}
void init(){
read(n); read(m);
sol.init(n);
int u, v, w;
for(int i = ; i < m; i++){
read(u); read(v); read(w);
sol.AddEdge(u, v, w);
}
return ;
}
void work(){
ans = sol.Max_Flow(, n);
return ;
}
void print(){
printf("%lld\n", ans);
return ;
}
int main(){
init();
work();
print();
return ;
}

最大流Dinic的更多相关文章

  1. 网络流之最大流Dinic算法模版

    /* 网络流之最大流Dinic算法模版 */ #include <cstring> #include <cstdio> #include <queue> using ...

  2. poj-1459-最大流dinic&plus;链式前向星-isap&plus;bfs&plus;stack

    title: poj-1459-最大流dinic+链式前向星-isap+bfs+stack date: 2018-11-22 20:57:54 tags: acm 刷题 categories: ACM ...

  3. 网络流之最大流Dinic --- poj 1459

    题目链接 Description A power network consists of nodes (power stations, consumers and dispatchers) conne ...

  4. 网络最大流Dinic

    1.什么是网络最大流 形象的来说,网络最大流其实就是这样一个生活化的问题:现在有一个由许多水管组成的水流系统,每一根管道都有自己的最大通过水流限制(流量),超过这个限制水管会爆(你麻麻就会来找你喝茶q ...

  5. HDU 3572 Task Schedule(拆点&plus;最大流dinic)

    Task Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) To ...

  6. 学习笔记 --- 最大流Dinic算法

    为与机房各位神犇同步,学习下网络流,百度一下发现竟然那么多做法,最后在两种算法中抉择,分别是Dinic和ISAP算法,问过 CA爷后得知其实效率上无异,所以决定跟随Charge的步伐学习Dinic,所 ...

  7. Power Network(网络流最大流 &amp&semi; dinic算法 &plus; 优化)

    Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 24019   Accepted: 12540 D ...

  8. ZOJ-2364 Data Transmission 分层图阻塞流 Dinic&plus;贪心预流

    题意:给定一个分层图,即只能够在相邻层次之间流动,给定了各个顶点的层次.要求输出一个阻塞流. 分析:该题直接Dinic求最大流TLE了,网上说采用Isap也TLE,而最大流中的最高标号预流推进(HLP ...

  9. POJ2112&lowbar;Optimal Milking&lpar;网洛流最大流Dinic&plus;最短路Flody&plus;二分&rpar;

    解题报告 农场有k个挤奶机和c头牛,每头牛到每一台挤奶机距离不一样,每台挤奶机每天最多挤m头牛的奶. 寻找一个方案,安排每头牛到某一挤奶机挤奶,使得c头牛须要走的全部路程中的最大路程的最小值. 要使每 ...

  10. 最大流dinic模板

    循环版,点的编号从0开始: ; ; const int INF = 0x3f3f3f3f; struct Edge { int to, next, cap, flow; }edge[MAXM]; in ...

随机推荐

  1. apache maven pom setting

    <?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ...

  2. 整理一些常用函数库PHP版本

    function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) { if(function_ex ...

  3. Django 缓存系统

    Django 是动态网站,一般来说需要实时地生成访问的网页,展示给访问者,这样,内容可以随时变化,但是从数据库读多次把所需要的数据取出来,要比从内存或者硬盘等一次读出来 付出的成本大很多. 缓存系统工 ...

  4. Webpack 4 Tutorial&colon; from 0 Conf to Production Mode

    webpack 4 is out! The popular module bundler gets a massive update. webpack 4, what's new? A massive ...

  5. Word报告自动生成(例如 导出数据库结构)

    将很早之前写的一个小组件重新整理优化一下,做成一个通用的功能.适用于导出数据库的结构(表.字段等)到Word或将体检数据自动生成Word版的体检报告等.代码:Github 一.主要需要完成功能: 1. ...

  6. Histogram of Oriented Gridients&lpar;HOG&rpar; 方向梯度直方图

    Histogram of Oriented Gridients,缩写为HOG,是目前计算机视觉.模式识别领域很常用的一种描述图像局部纹理的特征.这个特征名字起的也很直白,就是说先计算图片某一区域中不同 ...

  7. py解释器PC

    pycharm激活方法: 今天更新了一下pycharm,结果之前的激活就不能用了,下面是激活方法: 1.mac下在终端进入etc目录: cd /etc 2.编辑hosts文件: vi hosts 将“ ...

  8. spark aggregate函数详解

    aggregate算是spark中比较常用的一个函数,理解起来会比较费劲一些,现在通过几个详细的例子带大家来着重理解一下aggregate的用法. 1.先看看aggregate的函数签名在spark的 ...

  9. Android 微信分享,分享到朋友圈与分享到好友,以及微信登陆

    extends:http://www.cnblogs.com/android100/p/Android-qq.html 一.申请你的AppID http://open.weixin.qq.com/ 友 ...

  10. 【转】SQL SERVER 2005&sol;2008 中关于架构的理解

    在一次的实际工作中碰到以下情况,在 SQL SERVER 2008中,新建了一个新用户去访问几张由其他用户创建的表,但是无法进行查询,提示“对象名'CustomEntry' 无效.”.当带上了架构名称 ...