you can compute indeg[] for every node. Then start with any node with indeg=
0 and decrease all its neighbor's indeg by 1, push all indeg=0 nodes into a
queue and keep going. If you can exhaust all nodes, then it is DAG (assume
graph is connected, or you can use bfs/dfs to mark all nodes in current
connected component), otherwise there are cycles. Correctness can be proved
by induction.