Modified topological sort
Topological sorting would work if all $b_k$'s were zero.  Here is a way that takes into account the $b_k$'s.  Build a dag where each vertex is a task and there are edges from each task to its child tasks.  Then, use the following algorithm:

Out of all sinks (vertices with out-degree zero), find the one whose $b_k$ value is smallest.  Output it, then delete it and all edges into it.

Repeat, until all vertices have been output.


I believe this will output an optimal schedule, in reverse order (last task first).