1、ve数组的求解
ve:顶点(事件)的最早开始时间(时刻)。
//拓扑序列
stack<int> topOrder;
//拓扑排序,顺便求ve数组
bool topologicalSort()
{
queue<int> q;
for(int i=0;i<n;i++) //遍历所有点,将入度为0的点加入队列
{
if(inDegree[i]==0)
{
q.push(i);
}
}
while(!q.empty()) //队列非空
{
int u=q.front();
q.pop();
topOrder.push(u);
for(int i=0;i<G[u].size();i++) //遍历u的所有后继节点
{
int v=G[u][i];
inDegree[v]--;
if(inDegree[v]==0)
{
q.push(v);
}
//更新ve数组
if(ve[u]+G[u][i].w>ve[v])
{
ve[v]=ve[u]+G[u][i];
}
}
}
if(topOrder.size()==n) return true;
else return false;
}
2、vl数组的求解
vl:顶点(事件)的最迟开始时间(时刻)。
fill(vl,vl+n,ve[n