当前位置: 首页 > news >正文

关键路径-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求出各顶点结束时间,对于拓扑排序,就是将结束时间从大到小排序。

相关文章:

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

关键路径-STL版 题目描述 给定有向图无环的边信息&#xff0c;求每个顶点的最早开始时间、最迟开始时间。 输入 第一行图的顶点总数 第二行边的总数 第三行开始&#xff0c;每条边的时间长度&#xff0c;格式为源结点 目的结点 长度 输出 第一行&#xff1a;第个顶点的最早…...

最新AI创作系统ChatGPT系统运营源码,支持GPT-4图片对话能力,上传图片并识图理解对话,支持DALL-E3文生图

一、AI创作系统 SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01;本系统使用NestjsVueTypescript框架技术&#xff0c;持续集成AI能力到本系统。支持OpenAI DALL-E3文生图&#xff0c;…...

小航助学题库蓝桥杯题库stem选拔赛(21年3月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSD…...

[python]离线加载fetch_20newsgroups数据集

首先手动下载这个数据包 http://qwone.com/~jason/20Newsgroups/20news-bydate.tar.gz 下载这个文件后和脚本放一起就行&#xff0c;然后 打开twenty_newsgroups.py文件&#xff08;在fetch_20newsgroups函数名上&#xff0c;右键转到定义即可找到&#xff09; 之后运行代码即…...

Python与设计模式--代理模式

5-Python与设计模式–代理模式 一、网络服务器配置白名单 代理模式是一种使用频率非常高的模式&#xff0c;在多个著名的开源软件和当前多个著名的互联网产品后 台程序中都有所应用。下面我们用一个抽象化的简单例子&#xff0c;来说明代理模式。首先&#xff0c;构造一个网…...

ubuntu挂载磁盘,以及开机自动挂载磁盘

1. 挂载临时磁盘&#xff08;关机自动取消挂载&#xff09; 在Ubuntu上挂载磁盘涉及到几个步骤&#xff0c;其中包括查看可用磁盘、创建挂载点、编辑 /etc/fstab 文件以确保在系统启动时自动挂载等。以下是一般的步骤&#xff1a; **查看可用磁盘和分区&#xff1a;**可以使用…...

Jetpack Compose中适应性布局的新API

Jetpack Compose中适应性布局的新API 针对大屏幕优化的新组合件。 使用新的Material适应性布局&#xff0c;为手机、可折叠设备和平板电脑构建应用程序变得更加简单&#xff01;市场上各种不同尺寸的Android设备的存在挑战了构建应用程序时对屏幕尺寸的通常假设。开发者不应该…...

小航助学题库蓝桥杯题库stem选拔赛(22年1月)(含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSDN博客 需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统&#xff08;含题库答题软件账号&#xff09;_程序猿下山的博客-CSD…...

蓝桥杯第100 题 九宫幻方 DFS 全排列 C++ 解题思维

题目 九宫幻方https://www.lanqiao.cn/problems/100/learning/?page1&first_category_id1&name%E4%B9%9D 思路和解题方法 一 &#xff08;DFS) 首先&#xff0c;定义了一些全局变量和数组。vis数组用于标记已经出现过的数字&#xff0c;a数组用于存储数独的初始状态…...

NOI / 1.10编程基础之简单排序 提问05:分数线划定 c语言 结构体

描述 世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才&#xff0c;A市对所有报名的选手进行了笔试&#xff0c;笔试分数达到面试分数线的选手方可进入面试。面试分数线根据计划录取人数的150%划定&#xff0c;即如果计划录取m名志愿者&#xff0c;则面试…...

再探Docker:从Docker基础到跨服务器部署

摘要&#xff1a; 这篇文章将从介绍Docker基础开始&#xff0c;逐步讲解如何创建镜像、使用Docker Compose编排容器、在Docker中更新部署环境&#xff0c;将更新后的环境打包为镜像并导出为tar包&#xff0c;最后在其他服务器上应用这个镜像。 1. Docker是什么 Docker是一种容…...

C# 使用PanGu分词

写在前面 这是官方介绍&#xff1a;盘古分词是一个中英文分词组件。作者eaglet 曾经开发过KTDictSeg 中文分词组件&#xff0c;拥有大量用户。作者基于之前分词组件的开发经验&#xff0c;结合最新的开发技术重新编写了盘古分词组件。 盘古分词组件需要配合其字典文件使用&am…...

Termius 一款优秀的跨平台 SSH 客户端工具

&#x1f525;&#x1f525;&#x1f525; 作为程序员或者运维管理人员&#xff0c;我们经常需要使用终端工具来进行服务器管理及各种操作&#xff0c;比如部署项目、调试代码、查看/优化服务、管理服务器等。 而实现远程服务器连接需要借助 SSH 协议来进行&#xff0c;SSH&am…...

生命科学领域 - 新药从研发到上市全流程

新药是指新研制的、临床尚未应用的药物&#xff0c;其化学本质应为新的化合物或称新化学实体、 新 分子实体、新活性实体。新药研发的根本目的是治疗疑难危重疾病&#xff0c;研制出来的药物即使是全新的化学结构&#xff0c;但是疗效或安全性却不及现有的药物便失去新药价值&a…...

血的教训------入侵redis之利用python来破解redis密码

血的教训------入侵redis之利用python来破解redis密码 利用强大的python来进行redis的密码破解&#xff0c;过程不亦乐乎&#xff0c;当然也可以用shell脚本 本篇文章只供学习交流&#xff0c;请勿他用&#xff0c;谢谢。 其他相关联的文章 [1]VMware安装部署kail镜像服务器【…...

yolov8-pose 推理流程

目录 一、关键点预测 二、图像预处理 二、推理 三、后处理与可视化 3.1、后处理 3.2、特征点可视化 四、完整pytorch代码 yolov8-pose tensorrt 一、关键点预测 注&#xff1a;本篇只是阐述推理流程&#xff0c;tensorrt实现后续跟进。 yolov8-pose的tensorrt部署代码…...

笔记十七、认识React的路由插件react-router-dom和基本使用

react-router 分类 web使用 react-router-dom native使用 react-router-native anywhere&#xff08;使用麻烦&#xff09; react-router 安装 yarn add react-router-dom main.jsx import React from "react"; import ReactDOM from "react-dom/client"…...

CleanMyMac X4.14.5Crack最新Mac电脑清理优化最佳应用

CleanMyMac X 4.14.5是用于清理和优化Mac的最佳应用程序和强大工具。它看起来很棒而且很容易理解。该软件可以清理、保护、优化、稳定和维护您的 Mac 系统。您可以立即删除不必要的、不寻常的、无用的垃圾文件、损坏的文件垃圾&#xff0c;并释放大量内存空间。此外&#xff0c…...

Linux shell单双引号区别

shell单双引号区别&#xff1a; Shell脚本中很多时候都在用单引号或双引号来框住字符串&#xff0c;但是他们之间是存在区别的 避免踩坑记录… 单引号 单引号中的任何字符都没有特殊含义,即一些转义字符&#xff0c;$ 变量引用都会无效&#xff0c;它只把他们当作一个单纯的…...

ES 8.x开始(docker-compose安装、kibana使用、java操作)

学习文档地址 一、Docker安装 这里使用docker-compose来安装&#xff0c;方便后续迁移&#xff0c;Elasticserach和kibina一起安装。 1、创建安装目录 configdataplugins 2、配置文件 配置文件有两个&#xff0c;一个是ES的配置文件&#xff0c;一个docker-compose的配置文件 …...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

破解路内监管盲区:免布线低位视频桩重塑停车管理新标准

城市路内停车管理常因行道树遮挡、高位设备盲区等问题&#xff0c;导致车牌识别率低、逃费率高&#xff0c;传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法&#xff0c;正成为破局关键。该设备安装于车位侧方0.5-0.7米高度&#xff0c;直接规避树枝遮…...

LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用

中达瑞和自2005年成立以来&#xff0c;一直在光谱成像领域深度钻研和发展&#xff0c;始终致力于研发高性能、高可靠性的光谱成像相机&#xff0c;为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...

mac:大模型系列测试

0 MAC 前几天经过学生优惠以及国补17K入手了mac studio,然后这两天亲自测试其模型行运用能力如何&#xff0c;是否支持微调、推理速度等能力。下面进入正文。 1 mac 与 unsloth 按照下面的进行安装以及测试&#xff0c;是可以跑通文章里面的代码。训练速度也是很快的。 注意…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章

用 Rust 重写 Linux 内核模块实战&#xff1a;迈向安全内核的新篇章 ​​摘要&#xff1a;​​ 操作系统内核的安全性、稳定性至关重要。传统 Linux 内核模块开发长期依赖于 C 语言&#xff0c;受限于 C 语言本身的内存安全和并发安全问题&#xff0c;开发复杂模块极易引入难以…...

渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用

阻止除自定义标签之外的所有标签 先输入一些标签测试&#xff0c;说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时&#xff08;如通过点击或键盘导航&…...