给每个任务维护一个(完成所有前置任务的)最快时间,然后拓扑排序,取出一个点后更新这个点指向的其他任务的最快时间