Alternatives for finding sources in a DAG
Use a priority queue to keep a list of all vertices with prioritization on in-degrees.
Pop off one vertex $v$ with in-degree zero, decrement the in-degree-count of the out-neighborhood of $v$.
Repeat until empty.
If the input graph is a DAG, this will give you a topological ordering.