關鍵路徑理解不是很透徹,就先不;理解了,從代碼入手,總結一下代碼思路,不管理不理解,代碼寫出來再說(弱者口胡)。
準備
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即可判斷爲關鍵活動,
當圖中存在環即不可獲得關鍵路徑!