Concepts80

⚙️AlgorithmIntermediate

Coin Change and Variants

Coin Change uses dynamic programming to find either the minimum number of coins to reach a target or the number of ways to reach it.

#coin change#dynamic programming#unbounded knapsack+12
⚙️AlgorithmIntermediate

Dynamic Programming Fundamentals

Dynamic programming (DP) solves complex problems by breaking them into overlapping subproblems and using their optimal substructure.

#dynamic programming#memoization#tabulation+12
⚙️AlgorithmIntermediate

DP State Design

Dynamic Programming (DP) state design is the art of choosing what information to remember so that optimal substructure can be reused efficiently.

#dynamic programming#dp state#bitmask dp+11
⚙️AlgorithmIntermediate

Bipartite Matching - Hopcroft-Karp

Hopcroft–Karp computes maximum matching in a bipartite graph in O(E \sqrt{V}) time, which is asymptotically faster than repeated DFS (Kuhn's algorithm).

#hopcroft karp#bipartite matching#augmenting path+11
⚙️AlgorithmIntermediate

Bipartite Matching - Kuhn's Algorithm

Kuhn’s algorithm finds a maximum matching in a bipartite graph by repeatedly searching for augmenting paths using DFS.

#bipartite matching#kuhn algorithm#augmenting path+12
⚙️AlgorithmIntermediate

König's Theorem

König's Theorem states that in any bipartite graph, the size of a maximum matching equals the size of a minimum vertex cover.

#konig's theorem#bipartite matching#minimum vertex cover+12
⚙️AlgorithmIntermediate

Flow - Modeling Techniques

Many classic problems can be modeled as a maximum flow problem by building the right network and capacities.

#max flow#dinic#bipartite matching+12
⚙️AlgorithmIntermediate

Min-Cut Max-Flow Theorem

The Max-Flow Min-Cut Theorem says the maximum amount you can push from source to sink equals the minimum total capacity you must cut to disconnect them.

#max flow#min cut#edmonds karp+12
⚙️AlgorithmIntermediate

Maximum Flow - Dinic's Algorithm

Dinic's algorithm computes maximum flow by repeatedly building a level graph with BFS and sending a blocking flow using DFS.

#dinic#maximum flow#blocking flow+11
⚙️AlgorithmIntermediate

Maximum Flow - Ford-Fulkerson

Ford–Fulkerson finds the maximum possible flow from a source to a sink by repeatedly pushing flow along an augmenting path in the residual graph.

#maximum flow#ford-fulkerson#edmonds-karp+10
⚙️AlgorithmIntermediate

LCA - Binary Lifting

Binary lifting precomputes 2^k ancestors for every node so we can jump upward in powers of two.

#lca#binary lifting#tree+12
⚙️AlgorithmIntermediate

Strongly Connected Components

Strongly Connected Components (SCCs) partition a directed graph into maximal groups where every vertex can reach every other vertex in the group.

#strongly connected components#tarjan#kosaraju+12