Improve solution speed (~1 sec)

This is done by adding extra edges to the graph (from special start and
end nodes) and doing a single `ShortestPath` rather than running it for
each start node. The `ShortestPath` was the bottle neck, so this makes
it quicker.