long long criticalpath(int n){
vector<int> topo;
queue<int> node;
for(int i=0;i<n;i++)
if(indegree[i]==0)
node.push(i);
long long res=0;
while(!node.empty()){
int u=node.front();
node.pop();
for(int i=0;i<graph[u].size();i++){
int v=graph[u][i];
e[v]=max(e[v],e[u]+time[u]);
indegree[v]--;
if(indegree[v]==0){
node.push(v);
res=max(res,e[v]+time[v]);
}
}
}
for(int i=topo.size()-1;i>=0;i--){
int u=topo[i];
if(graph[u].size()==0)
l[u]=e[u];
else l[u]=inf;
for(int j=0;j<graph[u].size();j++){
int v=graph[u][j];
l[u]=min(l[u],l[v]-time[u]);
}
}
return res;
}
}
09-02