关键路径-STL版/拓扑排序 关键路径【数据结构】

关键路径-STL版

题目描述
给定有向图无环的边信息,求每个顶点的最早开始时间、最迟开始时间。

输入
第一行图的顶点总数

第二行边的总数

第三行开始,每条边的时间长度,格式为源结点 目的结点 长度

输出
第一行:第个顶点的最早开始时间

第二行:每个顶点的最迟开始时间

输入样例1
9
12
0 1 3
0 2 10
1 3 9
1 4 13
2 4 12
2 5 7
3 6 8
3 7 4
4 7 6
5 7 11
6 8 2
7 8 5

输出样例1
0 3 10 12 22 17 20 28 33
0 9 10 23 22 17 31 28 33

拓扑排序 关键路径

拓扑排序其实就是对有向无环图的顶点的一种排序,每个顶点出现且只出现一次。
对一个AOV网进行拓扑排序的方法:

  1. 从AOV网中选择一个入度为0的顶点并输出;
  2. 从网中删除该顶点和所有以它为起点的有向边;
  3. 重复1和2直到当前的AOV网为空或当前网中不存在入度为0的顶点为止;
  • 拓扑排序可以验证是否有环,如果有环,则无法将所有节点加入排序数组,如果没环就可以
  • 拓扑排序序列不是唯一的,可以根据节点序号递增,或通过队列、栈来给出
  • 逆拓扑排序也可以是拓扑排序逆过来

逆拓扑排序的步骤:

1、从AOV网中选择一个出度为0的顶点并输出;

2、从网中删除该顶点和所有以它为终点的有向边;

3、重复1和2,直到当前的AOV网为空

关键路径:从源点到汇点的有向路径可能有多条,所有路径中,具有最大路径长度的路径称为关键路径,而把关键路径上的活动称为关键活动

  • 活动ai的最早开始时间e(i):指该活动弧的起点所表示的事件的最早发生时间;
  • 活动ai的最迟开始时间l(i):指该活动弧的终点所表示事件的最迟发生时间与该活动所需时间之差;
  • 活动ai的时间余量:d(i)=l(i)-e(i),表示在不增加完成整个工程所
  • l(i)=e(i)的活动ai是关键活动,由关键活动组成的路径就是关键路径。
#include<bits/stdc++.h>
using namespace std;
int main()
{int n;cin>>n;int line;cin>>line;//邻接矩阵int a[505][505] = {0};//顶点入度int ind[505] = {0};for(int i = 0; i < line; i++){int v1,v2,v;cin>>v1>>v2>>v;a[v1][v2] = v;ind[v2] ++;}queue<int> q;//拓扑排序数组int ssort[505];for(int i = 0; i < n; i++){if(ind[i] == 0) {q.push(i);ind[i] = -1;}}int cnt = 0;while(!q.empty()){int now = q.front();q.pop();//加入拓扑排序数组ssort[cnt++] = now;for(int i = 0; i < n; i++){if(a[now][i]) ind[i]--;if(ind[i] == 0){q.push(i);ind[i] = -1;}}}//拓扑排序另一种实现方式 更方便// int num = 0;// // while(num < n)// {//     for(int i = 0; i < n; i++)//     {//         if(ind[i] == 0) //         {//             ind[i] = -1;//             ssort[num++] = i;//             for(int j = 0; j < n; j++)//             {//                 if(a[i][j]) ind[j]--;//             }//         }//     }// }int start = ssort[0];int end = ssort[n-1];//最早开始时间和最晚开始时间int earliest[505] = {-1}, latest[505] = {99999999};earliest[start] = 0;//最早开始时间根据拓扑排序顺序计算//即前一个的最早开始时间加上到该点的时间的最大值for(int i = 1; i < n; i++){int ans = 0;int index = ssort[i];for(int j = 0; j < n; j++){if(a[j][index]) ans = max(ans,earliest[j] + a[j][index]);}earliest[index] = ans;}for(int i = 0; i < n; i++){cout<<earliest[i]<<" ";}cout<<endl;//最后一个点的最早开始时间和最晚开始时间相等latest[end] = earliest[end];//最晚开始时间根据逆拓扑排序顺序计算//即后一个点的最晚开始时间减去到该点的时间的最小值for(int i = n-2; i >= 0; i--){int index = ssort[i];int ans = 99999999;for(int j = 0; j < n; j++){if(a[index][j]) ans = min(ans,latest[j] - a[index][j]);}latest[index] = ans;}for(int i = 0; i < n; i++){cout<<latest[i]<<" ";}cout<<endl;return 0;
}

另外可以用DFS求拓扑排序数组:
祖先结点的DFS函数结束时间大于子孙结点的DFS函数结束时间,利用DFS求出各顶点结束时间,对于拓扑排序,就是将结束时间从大到小排序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/174420.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

性能压测工具:wrk

一般我们压测的时候&#xff0c;需要了解衡量系统性能的一些参数指标&#xff0c;比如。 1、性能指标简介 1.1 延迟 简单易懂。green:一般指响应时间 95线&#xff1a;P95。平均100%的请求中95%已经响应的时间 99线&#xff1a;P99。平均100%的请求中99%已经响应的时间 平…

案例030:基于微信小程序的英语学习交流平台

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

电子学会C/C++编程等级考试2021年12月(三级)真题解析

C/C++等级考试(1~8级)全部真题・点这里 第1题:我家的门牌号 我家住在一条短胡同里,这条胡同的门牌号从1开始顺序编号。 若所有的门牌号之和减去我家门牌号的两倍,恰好等于n,求我家的门牌号及总共有多少家。 数据保证有唯一解。 时间限制:1000 内存限制:65536输入 一个…

CSGO搬砖如何选品?选品软件和教程靠谱吗?

说到CSGO搬砖项目&#xff0c;目前平台最火的就是CSGO游戏搬砖。在CSGO搬砖项目中&#xff0c;选品是至关重要的环节&#xff0c;直接影响到利润。而选品软件可以帮助我们更快地了解市场变化、计算成本利润等关键信息&#xff0c;提高选品的效率和准确性。可靠的选品软件还能够…

简易版王者荣耀

所有包和类 GameFrame类 package newKingOfHonor;import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.File; import java.util.ArrayList;im…

如何使用技术SEO来优化产品轮播

SEO&#xff08;搜索引擎优化&#xff09;对你来说并不陌生。现代电子商务系统通常包含旨在吸引谷歌等搜索引擎机器人注意的关键字。 但是&#xff0c;技术 SEO 在代码和服务器级别调查电子商务 SEO 策略。它改善了网站的技术因素&#xff0c;例如页面加载的速度以及抓取的直接…

MySQL三范式

欢迎大家到我的博客浏览。MySQL三范式 | YinKais Blog 简介 三大范式是 MySQL 数据库设计表结构所遵循的规范和指导方法&#xff0c;目的是为了减少冗余&#xff0c;建立结构合理的数据库&#xff0c;从而提高数据存储和使用的性能。 三大范式之间是有依赖关系的&#xff0c…

pytorch训练模板

来源&#xff1a;http://worthpen.top/#/home/blog?blogpot-blog36.md 引言 本项目实现了基于PyTorch Lightning的神经网络训练和测试管道。项目除了实现PyTorch Lightning的工作流外&#xff0c;还实现了通过任务池在训练过程中添加任务、k折交叉验证、将训练结果保存在.cv…

【华为OD】统一考试B\C卷真题 100%通过:开源项目热榜 C/C++实现

目录 题目描述&#xff1a; 示例1 示例2 题目描述&#xff1a; 某个开源社区希望将最近热度比较高的开源项目出一个榜单&#xff0c;推荐给社区里面的开发者。对于每个开源项目&#xff0c;开发者可以进行关注(watch)、收藏(star)、fork、提issue、提交合并请求(MR)等。 数…

一觉睡到大天亮,dido P1S智能手环体验

智能穿戴设备对于有关注健康的朋友来说&#xff0c;是非常使用的工具&#xff0c;它们可以帮助我们实时监测一些健康数据&#xff0c;最近几年&#xff0c;国产的智能穿戴设备突飞猛进&#xff0c;大幅拉低了价格门槛&#xff0c;而且使用体验也很不错&#xff0c;现在我用的也…

Maven回顾

Maven 下载&#xff08;前提要有jdk&#xff09; Maven 下载地址&#xff1a;Maven – Download Apache Maven 设置 Maven 环境变量 添加环境变量 MAVEN_HOME&#xff1a; 右键 "计算机"&#xff0c;选择 "属性"&#xff0c;之后点击 "高级系统设置…

【Yocto】yocto编译系统Image优化笔记

yocto编译系统Image优化笔记 使用yocto编译出来的Image文件(比如ext4格式&#xff09;有时候根据业务需求&#xff0c;是要进行剪裁以缩小Image的Size。 比如系统有OTA需求&#xff0c;系统预留的OTA分析大小是500M。但是Image&#xff08;ext4格式&#xff09;是1G大小。即使…

Python验证厚尾数据遵循幂律分布

统计学是数据科学和分析的基石。 它为我们提供了一个强大的工具箱来客观地回答复杂的问题。 然而&#xff0c;许多我们最喜欢的统计工具在应用于特定类别的数据&#xff08;幂律&#xff09;时变得毫无用处。 统计中的幂函数分布 scipy.stats.powerlaw() 是幂函数连续随机变量…

Python---练习:使用Python函数编写通讯录系统

预览通讯录系统最终效果 首先&#xff0c;进行需求分析&#xff0c;整个系统功能&#xff0c;分为6个板块&#xff0c;功能如下&#xff1a; ① 添加学员信息 ② 删除学员信息 ③ 修改学员信息 ④ 查询学员信息 ⑤ 遍历所有学员信息 ⑥ 退出系统 系统共6个功能&#xff…

Lighthouse(灯塔)—— Chrome浏览器强大的性能测试工具

本文浏览器版本参考如下&#xff1a; 一、认识Lighthouse Lighthouse 是 Google 开发的一款工具&#xff0c;用于分析网络应用和网页&#xff0c;收集现代性能指标并提供对开发人员最佳实践的意见。 为 Lighthouse 提供一个需要审查的网址&#xff0c;它将针对此页面运行一连…

TIME_WAIT状态套接字重新使用

《TIME_WAIT相关知识》里边有相关理论知识。 《TIME_WAIT状态TCP连接导致套接字无法重用实验》有相关实验。 现代Linux的TCP协议栈已经做了许多升级&#xff0c;所以可以让我们直接重用TIME_WAIT状态套接字而不会引起问题。下边是优化的内容&#xff1a; 1.新连接的SYN告知序列…

post请求乱码

如果在处理 POST 请求时出现乱码&#xff0c;你可以配置一个过滤器&#xff08;Filter&#xff09;来处理请求体的字符编码。以下是一个简单的 Java Servlet 过滤器的例子&#xff0c;用于设置请求和响应的字符编码&#xff1a; 在 web.xml 中配置过滤器&#xff1a; <filt…

MyBatis-Plus简介和入门操作

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

持续集成部署-k8s-配置与存储-存储类:动态创建NFS-PV案例

动态创建NFS-PV案例 1. 前置条件2. StorageClass 存储类的概念和使用3. RBAC 配置4. storageClass 配置5. 创建应用&#xff0c;测试 PVC 的自动配置6. 解决 PVC 为 Pending 状态问题7. 单独测试自动创建 PVC 1. 前置条件 这里使用 NFS 存储的方式&#xff0c;来演示动态创建 …

AI数字人与虚拟人:区别与应用场景

随着人工智能和虚拟技术的不断发展&#xff0c;AI数字人和虚拟人成为了数字世界中的两个重要概念。本文将介绍AI数字人和虚拟人的区别&#xff0c;并探讨它们在不同领域的应用场景。 一、AI数字人与虚拟人的区别 定义和概念&#xff1a; AI数字人&#xff1a;是利用人工智能技术…