Kuhn's algorithm (also called the Hungarian algorithm for unweighted bipartite graphs) repeatedly finds augmenting paths until none exist. Start with an empty matching, then for each unmatched vertex in , try to find an augmenting path using DFS.
This runs in time: you do iterations of DFS, each taking time. This is fast enough for most problems with .
Space complexity is for the data structures used.