任务安排

​ 平时有很多需要长期做的任务,而这些任务中的某些任务会对其他任务又要求,比如你不可能在不会写字的情况下去练习书法。为了提高每天的工作效率合理的安排做事的先后顺序就尤为重要。

​ 但在安排任务的先后顺序时,经常碰到这样的麻烦:由于每个任务耗时不同,可能需要一天,可能需要两天三天,并且任务之间有比较复杂的拓扑关系,导致安排完之后发现某一天的工作量非常小,而某一天的工作量又非常大,不能比较平均的分配这些任务。

​ 那么就想到用计算机强大的计算能力去帮助我们更好的规划每一天的安排。

任务安排

题目:

给出\(n(n<1000)\)个任务,分别编号为\(1,2,...,n\),完成每个任务需要花费\(t_i(t_i<T)\)天的时间来完成,任务不可拆分。此外这\(n\)个任务有\(m(m<10000)\)个要求,每个要求为描述为:要想开始做任务\(b\),必须先完成任务\(a\)。这里注意对于一个任务\(b\)可能会有多个任务\(a\)

现在给你\(T(T<100000)\)天时间,每天的任务的数量为\(N_i\),要求你给出一个任务完成任务的方案,使得\(max\{N_1, N_2,...,N_n\}\)最小。

题目保证所有任务一定都能完成。


输入格式:

第一行有三个整数分别为\(n,m,T\),表示共有\(n\)个任务,\(m\)个要求,\(T\)天的时间。

第二行有\(n\)个数字,代表完成每个任务所需要的时间。

接下来有\(m\)行,每行有两个整数\(a_i,b_i\),要想开始做任务\(b_i\),必须先完成任务\(a_i\)


输出格式:

\(1\)行整数包括\(n\)个数字,表示每个任务的开始时间。


假的样例(主要看看输入格式):

14 3 16
7 3 3 4 3 4 0 6 3 6 6 3 4 4
2 1
4 3
14 12
posted @ 2021-01-27 18:05  牟翔宇  阅读(220)  评论(0编辑  收藏  举报