Skip to main content
Mathematics LibreTexts

13.2: Flows and Cuts

  • Page ID
    97951
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Considering the applications suggested at the beginning of the chapter, it is natural to ask for the maximum value of a flow in a given network. Put another way, we want to find the largest number \(v_0\) so that there exists a flow \(ϕ\) of value \(v_0\) in the network. Of course, we not only want to find the maximum value \(v_0\), but we also want to find a flow \(ϕ\) having this value. Although it may seem a bit surprising, we will develop an efficient algorithm which both finds a flow of maximum value and finds a certificate verifying the claim of optimality. This certificate makes use of the following important concept.

    A partition \(V=L \cup U\) of the vertex set \(V\) of a network with \(S \in L\) and \(T \in U\) is called a cut. The capacity of a cut \(V=L \cup U\), denoted \(c(L,U)\), is defined by

    \(c(L,U)=\displaystyle \sum_{x \in L, y \in U} c(x,y)\).

    Put another way, the capacity of the cut \(V=L \cup U\) is the total capacity of all edges from \(L\) to \(U\). Note that in computing the capacity of the cut \(V=L \cup U\), we only add the capacities of the edges from \(L\) to \(U\). We do not include the edges from \(U\) to \(L\) in this sum.

    Example 13.3

    Let's again take a look at the network in Figure 13.2. Let's first consider the cut \(V=L_1 \cup U_1\) with

    \(L_1=\{S,F,B,E,D\}\) and \(U_1=\{A,C,T\}\).

    Here we see that the capacity of the cut is

    \(c(L_1,U_1)=c(F,A)+c(B,A)+c(B,C)+c(D,C)=24+15+20+42=101\).

    We must be a bit more careful, however, when we look at the cut \(V=L_2 \cup U_2\) with

    \(L_2=\{S,F,B,E\}\) and \(U_2=\{A,D,C,T\}\).

    Here the capacity of the cut is

    \(c(L_2,U_2)=c(F,A)+c(B,A)+c(B,C)+c(E,D)=24+15+20+20=79\).

    Notice that we do not include \(c(D,B)\) in the calculation as the directed edge \((D,B)\) is from \(U_2\) to \(L_2\).

    The relationship between flows and cuts rests on the following fundamentally important theorem.

    Theorem 13.4

    Let \(G=(V,E)\) be a network, let \(ϕ\) be a flow in \(G\), and let \(V=L \cup U\) be a cut. The value of the flow is at most as large as the capacity of the cut.

    Proof

    In this proof (and throughout the chapter), we adopt the very reasonable convention that \(ϕ(x,y)=0\) if \((x,y)\) is not a directed edge of a network \(\textbf{G}\).

    Let \(ϕ\) be a flow of value \(v_0\) and let \(V=L \cup U\) be a cut. First notice that

    \(v_0= \displaystyle \sum_{y \in V} ϕ(S,y)−\sum_{z \in V} ϕ(z,S)\),

    since the second summation is .0. Also, by the second of our flow conservation laws, we have for any vertex other than the source and the sink,

    \(\displaystyle \sum_{y \in V}ϕ(x,y)− \sum_{z \in V}ϕ(z,x)=0\).

    Now we have

    \(v_0= \displaystyle \sum_{y \in V}ϕ(S,y) - \sum_{z \in V}ϕ(z,S)\)

    \(= \displaystyle \sum_{y \in V} ϕ(S,y) - \sum_{z \in V}ϕ(z,S) + \sum_{x \in L \\ x \neq S}[\sum_{y \in V} ϕ(x,y) - \sum_{z \in V}ϕ(z,x)]\)

    \( = \displaystyle \sum_{x \in L} [ \sum_{y \in V} ϕ(x,y) - \sum_{z \in V} ϕ(z,x)]\)

    At this point, we want to pause and look at the last line. Notice that if \((a,b)\) is a directed edge with both endpoints in \(L\), then when the outer sum is conducted for \(x=a\), we get an overall contribution of \(ϕ(a,b)\). On the other hand, when it is conducted for \(x=b\), we get a contribution of \(−ϕ(a,b)\). Thus, the terms cancel out and everything simplifies to

    \(\displaystyle \sum_{x \in L \\ y \in U} ϕ(x,y) - \sum_{x \in L \\ z \in U} ϕ(z,x) \leq \sum_{x \in L \\ z \in U} ϕ(x,y) \leq \sum_{x \in L \\ y \in U} c(x,y) = c(L,U)\).

    Thus \(v_0 \leq c(L,U)\).

    Discussion 13. 5

    Bob's getting a bit of a sense of déjà vu after reading Theorem 13.4. He remembers from Chapter 5 that the maximum size of a clique in a graph is always at most the minimum number of colors required to properly color the graph. However, he also remembers that there are graphs without cliques of size three but with arbitrarily large chromatic number, so he's not too hopeful that this theorem is going to help out much here. Yolanda chimes in with a reminder of Chapter 6, where they learned that the maximum size of an antichain in a poset is equal to the minimum number of chains into which the ground set of the poset can be partitioned. Alice points out that Yolanda's statement is still true if the words “chain” and “antichain” are swapped. This sparks some intense debate about whether the maximum value of a flow in a network must always be equal to the minimum capacity of a cut in that network. After a while, Carlos suggests that continuing to read might be the best idea for resolving their debate.


    This page titled 13.2: Flows and Cuts is shared under a CC BY-SA 4.0 license and was authored, remixed, and/or curated by Mitchel T. Keller & William T. Trotter via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.

    • Was this article helpful?