---
id: max-flow
title: "Maximum Flow"
author: Benjamin Qi
prerequisites: 
 - Gold - Breadth First Search
description: Introduces maximum flow as well as flow with lower bounds.
frequency: 1
---

import { Problem } from "../models";

export const metadata = {
  problems: {
    maxSam: [
      new Problem("CSES", "Download Speed", "1694", "Easy", false, ["Max Flow"], ""),
    ],
    flow: [
      new Problem("CSES", "Distinct Routes", "1711", "Easy", false, ["Max Flow"], ""),
    ],
    match: [
      new Problem("CSES", "School Dance", "1696", "Easy", false, ["Max Flow"], ""),
      new Problem("Old Gold", "Cow Steepchase", "93", "Easy", false, ["Max Flow"], ""),
    ],
    dinic: [
      new Problem("SPOJ", "Fast Flow", "FASTFLOW", "Easy", false, [], ""),
      new Problem("YS", "Bipartite Matching", "bipartitematching", "Easy", false, [], ""),
    ],
    minEx: [
      new Problem("CSES", "Coin Grid", "1709", "Easy", false, [], ""),
    ],
    cut: [
      new Problem("CSA", "Fashion", "fashion", "Normal", false, [], ""),
      new Problem("CF", "Card Game", "problemset/problem/808/F", "Normal", false, [], ""),
      new Problem("CF", "Goods Transportation", "problemset/problem/724/E", "Hard", false, [], ""),
      new Problem("AC", "ARC E - MUL", "http://arc085.contest.atcoder.jp/tasks/arc085_c", "Hard", false, [], ""),
    ]
  }
};

## Maximum Flow

<problems-list problems={metadata.problems.maxSam} />

### Tutorial

<resources>
  <resource source="CPC" title="10 - Network Flow" url="10_graphs_3_network_flow"> </resource>
  <resource source="CPH" title="20 - Flows & Cuts"> </resource>
</resources>

### Problems

<problems-list problems={metadata.problems.flow} />

## Bipartite Matching

<problems-list problems={metadata.problems.match} />

## Dinic's Algorithm

<problems-list problems={metadata.problems.dinic} />

Hopcroft-Karp Bipartite Matching?

<optional-content title="Faster Flow">

There exist faster flow algorithms such as **Push-Relabel**. Also see the following blog post:

 - [Chilli: Dinic's with Scaling](https://codeforces.com/blog/entry/66006)

However, the standard implementation of Dinic's is (almost) always fast enough.

</optional-content>

## Min-Cut Max Flow

<problems-list problems={metadata.problems.minEx} />

(show equivalence)

Konig's?

  - [Closure Problem](https://en.wikipedia.org/wiki/Closure_problem)?

Dilworth stuff, antichains?

https://maps20.kattis.com/problems/thewrathofkahn

## Problems

<problems-list problems={metadata.problems.cut} />
