最大流模板成为另一个被攻克的模板题. 今天QDC给我讲了一下Dinic,感觉很好懂.于是为了巩固就把这道题A掉了. 核心思想就是不断BFS分层,然后不断DFS找增广路.找不到之后就可以把答案累加输出了. #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cctype> inline long long read(){ ,f=; ch…
题目链接:https://www.luogu.org/problemnew/show/P3376 #include <iostream> #include <cstdio> #include <algorithm> #include <queue> #include <cstring> using namespace std; const int inf = 1e9; ; int n, m, s, t, deep[maxn], maxflow;…
### P3376 题目链接 ### 这里讲一下三种优化的实现以及正确性. 1.dfs多路增广优化 一般的Dinic算法中是这样的,bfs() 用于标记多条增广路,以至于能一次 bfs() 出多次 dfs()增广路.那么就会有 while(bfs()) 一次,然后 dfs() n 次,出 n 条增广路. 那么我们 dfs 的优化在于使得一次 dfs() 直接累加出这一次 bfs() 所标记出的 n 条增广路.变成 while(bfs())然后 dfs() 一次 即可. 一般的 Dinic 算法:…
前置知识 网络最大流入门 前言 Dinic在信息学奥赛中是一种最常用的求网络最大流的算法. 它凭借着思路直观,代码难度小,性能优越等优势,深受广大oier青睐 思想 $Dinic$算法属于增广路算法. 它的核心思想是:对于每一个点,对其所连的边进行增广,在增广的时候,每次增广“极大流” 这里有别于EK算法,EK算法是从边入手,而Dinic算法是从点入手 在增广的时候,对于一个点连出去的边都尝试进行增广,即多路增广 Dinic算法还引入了分层图这一概念,即对于$i$号节点,用$dis(i)$表示它…
之前的Dinic模板照着刘汝佳写的vector然后十分鬼畜跑得奇慢无比,虽然别人这样写也没慢多少但是自己的就是令人捉急. 改成邻接表之后快了三倍,虽然还是比较慢但是自己比较满意了.虽然一开始ecnt从0开始WA了一发... 之前的码风也十分鬼畜呀缩进只缩1.2格不懂自己怎么想的.. 反正今天就安心划划水. #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #in…
题意:给出n,np,nc,m,n为节点数,np为发电站数,nc为用电厂数,m为边的个数.      接下来给出m个数据(u,v)z,表示w(u,v)允许传输的最大电力为z:np个数据(u)z,表示发电站的序号,以及最大的发电量:      nc个数据(u)z,表示用电厂的序号,以及最大的用电量.      最后让你求可以供整个网络使用的最大电力.思路:纯模板题.      这里主要是设一个源点s和一个汇点t,s与所有发电厂相连,边的最大容量为对应发电厂的最大发电量:      t与所有用电厂相连…
(点击此处查看原题) Dinic算法 Dinic算法相对于EK算法,主要区别在于Dinic算法对图实现了分层,使得我们可以用一次bfs,一次dfs使得多条增广路得到增广 普通的Dinic算法已经可以处理绝大多数最大流(最小割)的题目了,但是总是有些题目会卡住普通的Dinic算法,此时我们就需要用到当前弧优化了 当前弧优化简述 不要小看当前弧优化,这个优化效果可是很明显的,就这个例题来说,我用普通的Dinic算法用时约1.7s,而使用了当前弧优化的Dinic算法后,只用了176ms,由此可以看出这…
模板类型的题具体参考国家集训队论文:http://wenku.baidu.com/view/0f3b691c59eef8c75fbfb35c.html 参考博客:http://blog.csdn.net/qq172108805/article/details/7783010 #include<stdio.h> #include<string.h> #include<queue> using namespace std; #define N 300 #define inf…
题目:http://poj.org/problem?id=2584 像模板一样的简单题.继续使用 & 的当前弧优化和神奇的构造函数. #include<iostream> #include<cstdio> #include<cstring> #include<queue> using namespace std; ],dfn[],cur[],l,r,mxflow,xnt,x,t; ; ],tm1,tm2; struct Edge{ int next,…
1 #include<bits/stdc++.h> 2 #define int long long 3 using namespace std; 4 const int maxn=5005; 5 const int inf=0x3f3f3f3f; 6 int tot,n,m,s,t,x,y,z,d[maxn]; 7 int adj[maxn],nex[maxn<<1],to[maxn<<1],w[maxn<<1],flow[maxn<<1]; 8…