假设您有一组可以并行完成的作业。每个工作都有时间要求(第i个工作的时间要求是t_i)。还有一些依赖关系,他们中的第一个说你必须在工作v_i之前做u_i工作。你必须最小化所需的总时间。具有更新的节点加权DAG和最长路径
这很容易通过将这些关系转换为有向无环图,然后使用它来确定哪些要并行执行。
如果我不清楚,这里是一个例子。假设你有5个工作时间要求为2,9,3,12,5,你必须在5之前4,5之前3,之前1和之前1之前做3。然后你能做的最好的是17。您的DAG:
+---> 1 (2) ---> 2(9)
|
3 (3)
|
+----> 5 (5)
^
|
4 (12)-+
您可以同时做3和4,让你花MAX(3,12)= 12个单位的时间做5,这需要5个单位的时间之前。所以5在17个单位时间后完成。另一方面,2个在14个单位后完成。所以答案是17.
问题是,如果在每个查询中更新的准确时间要求(每次您从原始图开始,而不是之前修改后产生的图) 如何有效地找到新的最短时间要求?
对于那些想要约束的人,工作数< = 10^5。依赖关系数< = 10^6,查询数< = 10^6。
这是一些网上编程法官的问题吗?请给出问题的链接,如果有的话。 –
我不知道;这个问题今天出现在IOI选择测试(印度)第2天。 –