博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
不一样的网络流系列——Dinic跑得快
阅读量:6678 次
发布时间:2019-06-25

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

前言

摆王兴致冲冲地跑到我们机房来对我说跟你讲一个黑科技。。。

Dinic的神奇优化

Dinic优化

我们发现如果Dinic不建反向边会跑的飞起(当然Wa是必然的)

所以考虑在加反向边的基础上优化.

首先我们记录网络中最大的一个流量,设它为Min,然后:

  1. 把所有小于Min的边都加入网络中
  2. 最大流+=Dinic()
  3. Min /= 2
  4. 到1
    然后在Dinic时不走反向边(但是值要改变),最后在可以走反向边的情况下再来一次

注意bfs的一些操作,如果不当会溢出...

代码实现

#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define ll long long#define re register#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)#define int llinline int gi(){ int f=1,sum=0;char ch=getchar(); while(ch>'9' || ch<'0'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0' && ch<='9'){sum=(sum<<3)+(sum<<1)+ch-'0';ch=getchar();} return f*sum;}const int N=500010,M=2000010,Inf=1e10+10;int n,m,s,t,ans,dep[N],cur[N];struct node{ int u,v,c;}E[M];vector
front[N];vector
e;void Add(int u,int v,int c){ e.push_back((node){u,v,c}); e.push_back((node){v,u,0}); front[u].push_back(e.size()-2);}bool cmp(node a,node b){ return a.c>b.c;}queue
Q;bool bfs(){ memset(dep,127,sizeof(dep)); Q.push(s);dep[s]=0; while(!Q.empty()) { int u=Q.front();Q.pop(); for(int i=0;i
1e9 && e[id].c) { dep[v]=dep[u]+1; Q.push(v); } } } return dep[t]<1e9;}int dfs(int u,int flow) {// printf("%lld %lld\n",u,flow); if(!flow || u==t)return flow; int F=0; for(int &i=cur[u];i
>=1) { while(now
=p) { if(!type)Add(E[now].u,E[now].v,E[now].c); else front[E[now].v].push_back(now*2+1); now++; } ans+=Dinic(); } } printf("%lld\n",ans); return 0;}

转载于:https://www.cnblogs.com/mle-world/p/10327978.html

你可能感兴趣的文章
halcon算子翻译——fuzzy_measure_pairing
查看>>
二项式展开
查看>>
推荐系统-03-简单基于用户的推荐
查看>>
Android scaleType属性与ImagView中图片的显示的关系
查看>>
十、cent OS开启APR模式报错:configure: error: Found APR 1.3.9. You need version 1.4.3 or newer installed...
查看>>
八、阻塞等待异步结果FutureTask
查看>>
中文字符按拼音首字母排序(转)
查看>>
【mysql】一次有意思的数据库查询分析。
查看>>
Spring 框架中注释驱动的事件监听器详解
查看>>
C++获取window临时路径
查看>>
Python(面向对象编程—1)
查看>>
自己封装的数据通信服务组件DotNet.ServiceModel
查看>>
Docker创建虚机和swarm
查看>>
JSON入门学习
查看>>
一个很好的UML工具
查看>>
[转]无需看到你的脸就能认出你——实现Beyond Frontal Faces: Improving Person Recognition Using Multiple Cues...
查看>>
函数Curry化
查看>>
二进制补码,原码,反码和移码
查看>>
Default Constructor 的建构操作
查看>>
函数中的不定长参数研究 *and**
查看>>