【图论】拓扑排序

昨天复习的知识点。

​先复习一下 AOE网

AOE网,简单来说就是工程的带权有向图,其中:

  • 顶点:活动开始或者结束的事件
  • 边:活动
  • 边的权值:完成该活动所需的时间

在AOE网中,想要完成一项活动,必须要先完成在该活动前面的所有活动,例如下图中,想要完成活动e,必须要先完成活动abcd,完成活动a和c所需时间为3 + 2 = 5,完成活动b和d所需时间为5 + 4 = 9,二者取大,因此任务e的最早开始时间为9。

在这里插入图片描述
由此我们可以知道,整个工程从开始到结束所需要花费的时间是起始点到终止点的最大路径长度(因为这样才可以保证在终止点前的所有任务都完成了),这个有最大路径长度的路径就是关键路径,关键路径上的活动就叫做关键活动。

​总的来说,拓扑排序就是,后层的结点要依赖于前层的结点。

接下来分析一下拓扑排序和最短路的不同之处(主要是和dijkstra的不同之处),每次更新结点距离时,dijkstra是在当前结点距离大于更新后时才进行更新,同时只有被更新的结点才会入队,但是拓扑排序是在当前结点距离和被更新后距离中取最大的,同时将更新结点入度减一,且入队条件是当前结点入度为0。

模板代码:

queue<int> q;
vector<int> et(n + 1);
for (int i = 1; i <= n; i ++ )
    if (ind[i] == 0)
    {
   
        et[i] = w[i];
        q.push(i);
    }
while (q.size())
{
   
    auto t = q.front();
    q.pop();
    for (int i = 0; i < g[t].size(); i ++ )
    {
   
        int j = g[t][i];
        et[j] = max(et[j], et[t] + w[j]);
        ind[j] -- ;
        if (ind[j] == 0) q.push(j);
    }
}

三道例题见24.1.25的训练记录

相关推荐

  1. 算法——拓扑排序

    2024-01-27 04:04:02       18 阅读
  2. 洛谷——P1347 排序-拓扑排序)

    2024-01-27 04:04:02       39 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-27 04:04:02       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-27 04:04:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-27 04:04:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-27 04:04:02       20 阅读

热门阅读

  1. 844.比较含退格的字符串(力扣LeetCode)

    2024-01-27 04:04:02       30 阅读
  2. 【MySQL事务】MySQL事务初识

    2024-01-27 04:04:02       35 阅读
  3. C# Queryable类

    2024-01-27 04:04:02       26 阅读
  4. vue创建组件和使用

    2024-01-27 04:04:02       32 阅读
  5. 纯c实现栈和队列 数据结构大全

    2024-01-27 04:04:02       34 阅读
  6. chatGPT辅助写硕士毕业论文

    2024-01-27 04:04:02       38 阅读
  7. 第五章 使用 SQL Search - 验证 SQL 搜索项字符串

    2024-01-27 04:04:02       29 阅读
  8. 微信小程序px、rpx、vh、百分比单位介绍

    2024-01-27 04:04:02       147 阅读