Implementation of Dinic’s network flow algorithm. The algorithm works by first constructing a
level graph using a BFS and then finding augmenting paths on the level graph using multiple DFSs.
An implementation of the Ford-Fulkerson (FF) method with a DFS as a method of finding augmenting
paths. FF allows you to find the max flow through a directed graph as well as the min cut as a
byproduct.