求DAG中每个节点的可达节点数量

DAG(有向无环图),求每个节点可以走到多少个节点,要时间复杂度O(V^2)以下的程序,空间复杂度尽量小。
本人知道DFS,BFS,堆栈图等概念,请跳过相关介绍直接说干货。
对每个节点挨个深搜可以解决问题(复杂度O(V^2))但我希望更优的算法,也请跳过陈述类似算法。

一个节点可以多次走吗

原则上就是对DAG的深度优先遍历,并在遍历回退做计数统计。用堆栈来存储遍历的中间状态,计数保存在每个节点的数据上。
假设节点数是N,边的数量是M,最大深度是L。
如果用邻接矩阵来表示节点信息和连接信息,则空间复杂度是O(N *N);
如果用节点+边的数据结构(类似链表)来表示,则空间复杂度是O(N+M);
遍历时保存中间状态的堆栈,空间复杂度O(L);
遍历算法, 邻接表的时间复杂度是O(N * N);链表的时间复杂度是O(M)。

一般的做法是输入邻接表或者边的列表,转换成链表保存在内存,再做遍历计算。
参考: https://www.jianshu.com/p/9da88d296b99