Solution

ID: past-exam-of-the-mathematics-course-of-the-university-of-cambridge/2014/iii/paper-37/3/b/solution

Use vertex splitting to encode node failures as well as link failures. Replace each vertex by and an internal arc . Give that arc capacity one for an intermediary node, and capacity for the client and servers. Replace an undirected link by arcs and , each of capacity one. Connect server outputs to a common sink with capacity and take as source.
A minimum cut avoids capacity- arcs because failure of all original links provides a cheaper separating set. We can normalize its source side so that being on that side implies is also there: moving to that side cannot increase the cut capacity, since its sole outgoing arc leads to . In such a cut, at most one direction of any original link crosses. Every unit internal arc crossing corresponds to failing its intermediary node; every unit link arc corresponds to failing that link. Their failures disconnect all servers, so the cut capacity is the cost of a real failure set.
Conversely remove the internal arcs of failed nodes and both arcs of failed links. The reachable-side cut contains only arcs corresponding to those failures, with at most one crossing orientation per failed link; its capacity is at most their number. The max-flow min-cut theorem thus identifies the minimum mixed failure count exactly. Hence
The split graph has vertices and arcs, so the same Edmonds–Karp algorithm gives a polynomial-time decision procedure.

New to topics? Read the docs here!