Abhishek's answer will work for this problem, but I wanted to add an alternative that I've found to be faster. Abhishek has already mentioned (in passing) bipartite matching, to which the Hopcroft-Karp algorithm is relevant. The Hopcroft-Karp algorithm is used to find a maximum cardinality matching and runs in $O(sqrt(V)*E)$
time vs O(n^3)
for the Hungarian algorithm. "Maximum cardinality matching" basically means it finds the maximum number of assignments that can be made, so in my earlier example the maximum number of people that can be scheduled in for a photograph based on everyone's availability and the available time slots of the photographer. So if the returned maximum cardinality equals the number of people, you know that an assignment is possible for everyone.
Note that the reason we can use the Hopcroft-Karp algorithm in this example is that we don't care about edge weightings -- it makes no difference who gets assigned to which timeslot, as long as everyone gets some timeslot. We would need something like the Hungarian algorithm if we did care about weightings, e.g. if we had an "inconvenience factor" that every person assigned to each of their available timeslots, as the Hungarian algorithm is designed to optimize the result under these conditions where as Hopcroft-Karp only determines how many assignments are possible at all.
In practice I started off using the Hungarian algorithm and it took ~30 seconds to execute on my particular dataset. After switching it out for the Hopcroft-Karp algorithm, I could produce the same result in < 1 second.