Transitive reduction of DAG
We can solve this problem just by doing DFS from each vertex. 


For each vertex $u \in G$, start the DFS from each vertex $v$ such that $v$ is the direct descendant of $u$, ie. $(u,v)$ is an edge. 
For each vertex $v'$ reachable by the DFS from $v$, remove the edge $(u, v')$. 


The overall complexity of the above is the complexity of running $N$ DFS', which is $O(N(N+M))$.