Extensions of the critical path method through the application of integer programming