\section{Applications} \problem{Maximum Cardinality Matching} A \textit{matching} is a subset of edges in a bipartite graph. Nodes in a matching must not have more than one edge connected to them. \\ A matching is \textit{maximal} if it has more edges than any other matching. \vspace{5mm} \begin{minipage}[t]{0.48\textwidth} \begin{center} Initial Graph \\ \vspace{2mm} \begin{tikzpicture} % Nodes \begin{scope}[layer = nodes] \node[main] (A1) at (0mm, 24mm) {}; \node[main] (A2) at (0mm, 18mm) {}; \node[main] (A3) at (0mm, 12mm) {}; \node[main] (A4) at (0mm, 6mm) {}; \node[main] (A5) at (0mm, 0mm) {}; \node[main] (B1) at (20mm, 24mm) {}; \node[main] (B2) at (20mm, 18mm) {}; \node[main] (B3) at (20mm, 12mm) {}; \node[main] (B4) at (20mm, 6mm) {}; \node[main] (B5) at (20mm, 0mm) {}; \end{scope} % Edges \draw (A1) edge (B2) (A1) edge (B3) (A2) edge (B1) (A2) edge (B4) (A4) edge (B3) (A2) edge (B3) (A5) edge (B3) (A5) edge (B4) ; \end{tikzpicture} \end{center} \end{minipage} \hfill \begin{minipage}[t]{0.48\textwidth} \begin{center} Maximal Matching \\ \vspace{2mm} \begin{tikzpicture} % Nodes \begin{scope}[layer = nodes] \node[main] (A1) at (0mm, 24mm) {}; \node[main] (A2) at (0mm, 18mm) {}; \node[main] (A3) at (0mm, 12mm) {}; \node[main] (A4) at (0mm, 6mm) {}; \node[main] (A5) at (0mm, 0mm) {}; \node[main] (B1) at (20mm, 24mm) {}; \node[main] (B2) at (20mm, 18mm) {}; \node[main] (B3) at (20mm, 12mm) {}; \node[main] (B4) at (20mm, 6mm) {}; \node[main] (B5) at (20mm, 0mm) {}; \end{scope} % Edges \draw[opacity = 0.4] (A1) edge (B2) (A1) edge (B3) (A2) edge (B1) (A2) edge (B4) (A4) edge (B3) (A4) edge (B3) (A5) edge (B3) (A5) edge (B4) ; \draw (A1) edge (B2) (A2) edge (B1) (A4) edge (B3) (A5) edge (B4) ; \end{tikzpicture} \end{center} \end{minipage} \vspace{5mm} Create an algorithm that finds a maximal matching in any bipartite graph. \\ Find an upper bound for its runtime. \\ \hint{Can you modify an algorithm we already know?} \begin{solution} Turn this into a maximum flow problem and use FF. \\ Connect a node $S$ to all nodes in the left group and a node $T$ to all nodes in the right group. All edges have capacity 1. \vspace{2ex} Just like FF, this algorithm will take at most $\min(\# \text{ left nodes}, \# \text{ right nodes})$ iterations. \end{solution} \vfill \pagebreak \problem{Supply and Demand} Say we have a network of cities and power stations. Stations produce power; cities consume it. Each station produces a limited amount of power, and each city has limited demand. \vspace{2ex} We can represent this power grid as a graph, with cities and stations as nodes and transmission lines as edges. \vspace{2ex} A simple example is below. There are two cities ($2$ and $4$) and two stations (both $-3$). We'll represent station capacity with a negative number, since they \textit{consume} a negative amount of energy. \begin{center} \begin{tikzpicture}[ node distance = 25mm, main/.style = { draw, circle, fill = white, minimum size = 8mm }, ] % Nodes \begin{scope}[layer = nodes] \node[main] (S1) {$-3$}; \node[main] (S2) [below left of = S1] {$-3$}; \node[main] (C1) [below right of = S1] {$2$}; \node[main] (C2) [below right of = S2] {$4$}; \end{scope} % Edges \draw[->] (S1) edge node[label] {$3$} (S2) (S1) edge node[label] {$3$} (C1) (S2) edge node[label] {$2$} (C1) (S2) edge node[label] {$2$} (C2) (C1) edge node[label] {$2$} (C2) ; \end{tikzpicture} \end{center} We'd like to know if there exists a \textit{feasible circulation} in this network---that is, can we supply our cities with the energy they need without exceeding the capacity of our power plants and transmission lines? \vspace{2ex} \textbf{Your job:} Devise an algorithm that solve this problem. \vspace{2ex} \note{\textbf{Bonus:} Say certain edges have a lower bound on their capacity, meaning that we must send \textit{at least} that much flow down the edge. Modify your algorithm to account for these additional constraints.} \begin{solution} Create a source node $S$, and connect it to each station with an edge. Set the capacity of that edge to the capacity of the station. \\ Create a sink node $T$ and do the same for cities. \vspace{2ex} This is now a maximum-flow problem with one source and one sink. Apply FF. \linehack{} To solve the bonus problem, we'll modify the network before running the algorithm above. \vspace{2ex} Say an edge from $A$ to $B$ has minimum capacity $l$ and maximum capacity $u \geq l$. Apply the following transformations: \begin{itemize} \item Add $l$ to the capacity of $A$ \item Subtract $l$ from the capacity of $B$ \item Subtract $l$ from the total capacity of the edge. \end{itemize} Do this for every edge that has a lower bound then apply the algorithm above. \end{solution} \vfill \pagebreak