自行理解的Dinic 注释即讲解

#include<bits/stdc++.h>
const int maxn=;
using namespace std;
int read()
{
char ch=getchar();int f=,w=;
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch<=''&&ch>=''){w=w*+ch-'';ch=getchar();}
return f*w;
} //读入优化 struct sj{
int next;
int to;
int w; //w是剩余的流量
}a[maxn*];
int head[maxn],size=; //注意size 要赋值为1 否则会死循环
int m,n;
int s,t;
int cent[maxn]; //层数
int ans; void add(int x,int y,int z)
{
a[++size].to=y;
a[size].next=head[x];
head[x]=size;
a[size].w=z;
} //加边 bool bfs()
{
memset(cent,-,sizeof(cent)); //cent 层数先清零
queue <int> q;
q.push(s);
cent[s]=; //起点进栈
while(q.empty()!=)
{
int ks=q.front();
q.pop();
for(int i=head[ks];i;i=a[i].next)
{
int ts=a[i].to;
if(cent[ts]==-&&a[i].w>)
{
q.push(ts);
cent[ts]=cent[ks]+; //层数加1
}
}
}
if(cent[t]<) //如果已经找不到增广路
return ;
return ;
} int dfs(int x,int low) //dfs搜索 参数:当前的点,当前最小的流量
{
if(x==t)return low; //如果已经搜到终点了 就直接返回
int flow=,r; //避免重复流 每次都新定义一个统计的流量 每层都各自求和
for(int i=head[x];i;i=a[i].next)
{
int st=a[i].to;
if((a[i].w>)&&(cent[st]==cent[x]+))
{
r=dfs(st,min(a[i].w,low-flow)); //递归在这里
if(r>)
{
a[i].w-=r; //当前增广路走过的边 残量减掉这么多
a[i^].w+=r; //反向边则加上这么多
flow+=r; //流量加上r 这次找已经流了这么多
}
}
}
return flow; //递归返回时 则返回已经流完的流量
} int main() //主函数
{
n=read();m=read();
s=read();t=read();
for(int i=;i<=m;i++)
{
int x,y,z;
x=read();
y=read();
z=read();
add(x,y,z);
add(y,x,);
} //建立反向边
while(bfs())
{
int row=dfs(s,0x3f3f3f); //row代表这次搜索找到的流量总和
ans+=row;
cout<<row<<endl;
} //还能找到增广路
cout<<ans;
return ;
}

网络流(自行理解的Dinic)的更多相关文章

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

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

  2. 网络流(四)dinic算法

    传送门: 网络流(一)基础知识篇 网络流(二)最大流的增广路算法 网络流(三)最大流最小割定理 网络流(四)dinic算法 网络流(五)有上下限的最大流 网络流(六)最小费用最大流问题 转自:http ...

  3. 图论4——探索网络流的足迹:Dinic算法

    1. 网络流:定义与简析 1.1 网络流是什么? 网络流是一种"类比水流的解决问题方法,与线性规划密切相关"(语出百度百科). 其实,在信息学竞赛中,简单的网络流并不需要太高深的数 ...

  4. 网络流(最大流-Dinic算法)

    摘自https://www.cnblogs.com/SYCstudio/p/7260613.html 网络流定义 在图论中,网络流(Network flow)是指在一个每条边都有容量(Capacity ...

  5. 网络流_Edmond-Karp算法、Dinic算法

    转载:网络流基础篇——Edmond-Karp算法             BY纳米黑客 网络流的相关定义: 源点:有n个点,有m条有向边,有一个点很特殊,只出不进,叫做源点. 汇点:另一个点也很特殊, ...

  6. 我爱网络流之最大流Dinic

    直接上大佬博客: Dinic算法详解及实现来自小菲进修中 Dinic算法(研究总结,网络流)来自SYCstudio 模板步骤: 第一步,先bfs把图划分成分成分层图网络 第二步,dfs多次找增广路 当 ...

  7. [Poj2112][USACO2003 US OPEN] Optimal Milking [网络流,最大流][Dinic+当前弧优化]

    题意:有K个挤奶机编号1~K,有C只奶牛编号(K+1)~(C+K),每个挤奶机之多能挤M头牛,现在让奶牛走到挤奶机处,求奶牛所走的最长的一条边至少是多少. 题解:从起点向挤奶机连边,容量为M,从挤奶机 ...

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

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

  9. swift 自行理解

随机推荐

  1. ubuntu 使用apt命令时报错 E: Could not get lock /var/lib/dpkg/lock - open...

    问题描述: 刚刚安装好Ubuntu16.04.使用apt命令时,提示报错信息: abc@pc:~$ sudo apt-get install openssh-server E: Could not g ...

  2. 树莓派 - 修改pi账号密码,开启root账号

    1.修改PI账号的密码 password pi 2.开启root账号 树莓派使用的Linux是debian系统,所以树莓派启用root和debian是相同的. debian里root账户默认没有密码, ...

  3. 设置通过Maven创建的工程的JDK的版本,更改conf/settings.xml

    eclipse提示警告如下: Build path specifies execution environment J2SE-1.5. There are no JREs installed in t ...

  4. GIMP如何制作一只大佬猫头像

    新建文件File -> 设置宽度为24px,高度5px:高级选项中将背景图片设置为无色 使用铅笔,前景色设为黑色,画出眼镜的模样,画出反光效果:将前景色设为灰色 放大图片,右击空白区域-> ...

  5. 02等待单个线程返回WaitForSingleObject

    windows 多线程之等待线程返回 ​ 多线程编程中,有时我们需要等待某一线程完成了特定的操作之后再继续做其他事情,要实现这个目的,可以使用 Windows API 函数 WaitForSingle ...

  6. Survey lists 10 most innovative cities

    From China Daily Beijing and Shanghai are among the 10 most innovative cities in the world, based on ...

  7. leetcode-20-Dynamic Programming

    303. Range Sum Query - Immutable 解题思路: Note里说sumRange会被调用很多次..所以简直强烈暗示要做cache啊...所以刚开始,虽然用每次都去遍历数组求和 ...

  8. LeetCode(219) Contains Duplicate II

    题目 Given an array of integers and an integer k, find out whether there are two distinct indices i an ...

  9. Java技术——Java中创建对象的5种方式

    此文为译文 原文连接:https://dzone.com/articles/5-different-ways-to-create-objects-in-java-with-ex 0. 前言 作为Jav ...

  10. HDU 3394 双连通分量 桥 Railway

    第一个答案是统计图中桥的个数 如果一个点-双连通分量中边的个数大于点的个数那么这个块中所有的边都是冲突的,累加到第二个答案中去. #include <iostream> #include ...