Problem class of assigning N persons to N tasks, zero costs with prefs
This problem is known as maximum matching of a bipartite graph.
Basically let vertex $p_i$ (resp., $q_i$) represent the $i$th person (resp., task).
And we connect $p_i$ and $q_j$ with an undirected edge iff person $i$ can do task $j$.
The answer of the original problem is exactly the maximum matching of the new graph.

For algorithms, the classical Hungarian algorithm, of complexity $O(n^3)$, is a nice choice. Certainly you can reduce this problem to network flow, and then apply any max-flow algorithm.
If you are looking for some "advanced" choices, refer to Wikipedia.