A simple algorithm may be traverse all vertices, and perform DFS for every vertex.
However, the computational complexity is $O(n(n+m))$, where $n$ and $m$ are the number of vertices and edges in the DAG, respectively. (Since $m \in O(n^2)$, the complexity is actually $O(n^3)$. Hope I'm right about the complexity).
For very big graphs, the complexity is unacceptable.
Is there any algorithm or idea that can solve the problem (reduce the algorithm complexity)?