题目要求开发一个自动化部署调度程序,软件安装分为多个步骤,某些步骤有依赖关系,必须先完成前置步骤才能执行后续步骤,且无依赖的步骤可以并行执行。输入包括步骤总数、每个步骤所需的时间以及每个步骤的依赖关系,输出为完成所有步骤的最短时间。例如,输入步骤总数为4,每个步骤的执行时间为6, 2, 1, 2,依赖关系为某些步骤没有依赖,某些步骤有依赖,输出最短完成时间为9。
该问题本质是有向无环图(DAG)中的拓扑排序问题,要求根据步骤依赖关系调度任务,计算并行执行的最短完成时间。
通过拓扑排序,使用队列依次处理无依赖的节点,更新后续步骤的最早开始时间,累积计算每个步骤完成的最短总时间,最后输出最大值。
有一个比较复杂的软件系统需要部署到客户提供的服务器上。该软件系统的安装过程非常繁琐,为了降低操作成本,需要开发一个工具实现自动化部署。
软件的安装过程可以分成若干个小步骤,某些步骤间存在依赖关系,被依赖的步骤必须先执行完,才能执行后续的安装步骤。满足依赖条件的多个步骤可以并行执行。
请你开发一个调度程序,以最短的时间完成软件的部署。
第一行:总步骤数N(0<N<=10000)
第二行:N个以空格分隔的整数,代表每个步骤所需的时间。该行所有整数之和不大于int32
第三行开始的N行:表示每个步骤所依赖的其它步骤的编号(编号从1开始,行号减2表示步骤的编号),如果依赖多个步骤,用空格分隔。−1表示无依赖
测试用例确保各个安装步骤不会出现循环依赖。
1个数字,代表最短执行时间。
输入
4
6 2 1 2
-1
-1
1
3
输出
9
说明
一共4个步骤。
每个步骤所需的时间分别为6 2 1 2
步骤1和步骤2无依赖,可并发执行;步骤3依赖步骤1;步骤4依赖步骤
总的最小执行时间为6+1+2=9
输入
4
1 2 3 4
2 3
3
-1
1
输出
10
说明
步骤1依赖步骤2和3,步骤2依赖步骤3,步骤3无依赖,步骤4依赖步骤1
执行顺序为 3−−>2−−>1−−>4,最小执行时间为3+2+1+4=10