博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最大流Dinic算法的一些优化 [网络流][最大流]
阅读量:4708 次
发布时间:2019-06-10

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

明天省夏要讲网络流啦!晚上翻出自己的模板发现是蓝书模板QwQ。。拿出以前的提交代码(AC过的?)

曾经的提交记录

 

在luogu上重新提交一遍,结果gg...OVO

没有去除多余的inline

去除了多余的inline

 

论强数据练考验模板的好处?

于是决定自造一份正常的模板。。。

主要的优化有三——

(1) 当前弧优化,防止因重复访问一条边造成效率降低。

(2) 记录无法增广的点。

(3) 玄学优化?在Dinic的bfs过程中找到一条可增广的路径就返回(由于bfs的低效?),此优化在luogu的数据中表现良好。

具体可以看注释

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 #define inf 0x3f3f3f3f 7 8 int read(){ 9 bool flag=0; 10 char ch; 11 int re=0; 12 while((ch=getchar())!='-'&&(ch<'0'||ch>'9')); 13 ch=='-'?flag=1:re=ch-'0'; 14 while((ch=getchar())>='0'&&ch<='9') re=re*10+ch-'0'; 15 return flag?-re:re; 16 } 17 18 struct edge{ 19 int to,nxt,cap; 20 edge(int to=0,int nxt=0,int cap=0): 21 to(to),nxt(nxt),cap(cap){} 22 }; 23 24 const int maxn=10005,maxm=100005; 25 26 int n,m,s,t,cnt=1; 27 int tou[maxn],head[maxn],q[maxn],d[maxn]; 28 edge edges[maxm<<1]; 29 30 //增加一条流量为c的正向边和流量为0的反向边 31 //利于记录边的流量状态 32 inline void add_edge(int from,int to,int c){ 33 edges[++cnt]=edge(to,head[from],c); 34 head[from]=cnt; 35 edges[++cnt]=edge(from,head[to],0); 36 head[to]=cnt; 37 } 38 39 void init(){ 40 n=read(); m=read(); s=read(); t=read(); 41 for(int i=0,from,to,c;i

亲测表现良好。。。

 

转载于:https://www.cnblogs.com/ZYBGMZL/p/7231058.html

你可能感兴趣的文章
IDBC
查看>>
中国剩余定理
查看>>
DOM基础3
查看>>
如何将ppt转换为高清图片?
查看>>
spring注入方式和数据的注入
查看>>
win10+python3.5,使用requests抓取信息遇到chunked乱码的诡异问题。python2.7则不乱码...
查看>>
面向对象 组合
查看>>
UIScrollView的缩放原理
查看>>
runtime
查看>>
VS2008中宽字节和普通字节的使用
查看>>
父类 子类 构造方法
查看>>
vs2015下编译duilib的几个问题
查看>>
获取周的日期范围
查看>>
css案例学习之盒子模型
查看>>
postMan模拟get和post请求,支持局域网和外网
查看>>
day16T3改错记
查看>>
Linux 安装 JDK 8
查看>>
ASP.NET Core根据环境切换NLog配置
查看>>
高质量程序设计指南c++/c语言(20)--符号常量
查看>>
strncpy实现
查看>>