In the applet below, the directed graph represents a big job that can be broken down into several tasks. Each task has a certain amount of time it takes to complete (in minutes). An arrow pointing from one task to another means that the first task is a prerequisite for the second. Our goal is to try to determine how to assign these tasks to "processors" (which may be people, teams, machines, etc.). We want to do this as efficiently as possible according to the following rules:
To make our job easier, we will use a timeline to keep track of the current time. The program will not allow you to advance the timeline if there are tasks that can be assigned.