Unverified Commit 232cf8ea authored by Xeonacid's avatar Xeonacid Committed by GitHub
Browse files

Update max-flow.md

parent 918185ed
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -106,7 +106,7 @@ int main() {

### Dinic

**Dinic 算法** 的过程是这样的:每次增广前,我们先用 BFS 来将图分层。设源点的层数为 0,那么一个点的层数便是它离源点的最近距离。
**Dinic 算法** 的过程是这样的:每次增广前,我们先用 BFS 来将图分层。设源点的层数为 $0$,那么一个点的层数便是它离源点的最近距离。

通过分层,我们可以干两件事情:

@@ -115,7 +115,7 @@ int main() {

接下来是 DFS 找增广路的过程。

我们每次找增广路的时候,都只找比当前点层数多 1 的点进行增广(这样就可以确保我们找到的增广路是最短的)。
我们每次找增广路的时候,都只找比当前点层数多 $1$ 的点进行增广(这样就可以确保我们找到的增广路是最短的)。

Dinic 算法有两个优化:

@@ -257,14 +257,14 @@ $$
&\forall (u,v)\in E,&f(u,v)=\left\{\begin{split}
&c(u,v)&,u=s\\
&0&,u\neq s\\
\end{split}\right..
\end{split}\right.
\\
&\forall u\in V,&h(u)=\left\{\begin{split}
&|V|&,u=s\\
&0&,u\neq s\\
\end{split}\right.
,e(u)=\sum_{(x,u)\in E}f(x,u)-\sum_{(u,y)\in E}f(u,y).
\end{split}.
,e(u)=\sum_{(x,u)\in E}f(x,u)-\sum_{(u,y)\in E}f(u,y)
\end{split}
$$

上述将 $(s,v)\in E$ 充满流,并将 $h(s)$ 抬高,使得 $(s,v)\notin E_f$,因为 $h(s)>h(v)$,而且 $(s,v)$ 毕竟满流,没必要留在残存网络中;上述还将 $e(s)$ 初始化为 $\sum_{(s,v)\in E}f(s,v)$ 的相反数。
@@ -315,7 +315,7 @@ void relabel(int u){

### HLPP 算法

最高标号预流推进算法(High Level Preflow Push)是基于推送 - 重贴标签算法的优先队列实现,该算法优先推送高度高的溢出的结点,算法算法复杂度 $O(n^2\sqrt m)$.=
最高标号预流推进算法(High Level Preflow Push)是基于推送 - 重贴标签算法的优先队列实现,该算法优先推送高度高的溢出的结点,算法算法复杂度 $O(n^2\sqrt m)$。

具体地说,HLPP 维护以下过程: