关键路径理解不是很透彻,就先不;理解了,从代码入手,总结一下代码思路,不管理不理解,代码写出来再说(弱者口胡)。
准备
late数组
early数组
vector< int > s 邻接表
stack< int > sta 栈存逆序拓扑排序
思路
用邻接表求拓扑排序,然后栈存逆拓扑排序,先通过正序拓扑排序更新late[]数组,它保存的是最短时间,更新规则
late[next]=max(late[next],late[now]+power{now,next});
接下来把early[]数组全部用late数组最后一个最大元素初始化,用sta的逆拓扑排序跟新early数组,更新规则
early[now]=min(early[now],early[next]-power{now,next});
最后输出关键活动只需 late[next]-early[next]-power{next,now}==0即可判断为关键活动,
当图中存在环即不可获得关键路径!