Dynamic shortest paths and transitive closure: algorithmic techniques and data structures