1 solutions
-
0
题面描述
在一个有依赖关系的任务系统中,任务必须在前置任务完成后才能执行,每个任务需要特定的内存,且内存使用完后会被释放以供其他任务使用。给定任务数量及其内存需求和依赖关系,要求计算系统执行所有任务所需的最小内存。输入数据包括任务数量、各任务的内存需求以及各任务对其他任务的依赖关系矩阵。根据样例输入,系统中有9个任务,分别需要50、50、80、40、40、40、60、60、60的内存,并展示了任务之间的依赖关系。输出为执行所有任务所需的最小内存。
思路: 拓扑排序
一个任务依赖另一个任务表示被依赖的任务是依赖的任务的前置,即如果就代表着有一条j指向i的边。如果需要运行时间更小,那么就需要尽量让多的任务并行。那么考虑拓扑排序,每轮将所有入度为0的点的权值求和,即为本轮所消耗的内存。每轮消耗的内存的最大值即为答案。
代码分析
这段代码实现了基于拓扑排序的任务调度算法,用于计算执行所有任务所需的最小内存。以下是简要分析:
1. 数据结构
int in[M]
: 存储每个任务的入度(依赖于该任务的其他任务数)。int a[M]
: 存储每个任务所需的内存大小。vector<int> e[M]
: 邻接表表示任务间的依赖关系。
2. 输入处理
- 读取任务数量
n
和每个任务的内存需求。 - 构建依赖关系矩阵,更新入度数组和邻接表。
3. 拓扑排序实现
- 使用队列
q
存储当前入度为0的任务。 - 每轮处理队列中的任务,累加内存消耗,并更新依赖任务的入度。
- 将入度减至0的任务加入临时队列
tmp
。
4. 更新最大内存消耗
- 每轮结束后,更新记录的最大内存消耗
ans
。
5. 输出结果
- 输出最终的最大内存消耗,即执行所有任务所需的最小内存。
代码
C++
java
python
- 1
Information
- ID
- 50
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 6
- Tags
- # Submissions
- 14
- Accepted
- 11
- Uploaded By