Tipo de problema: Grafos, Fluxo Máximo
Neste problema tínhamos um grafo não dirigido como input e era pedido que descobrissemos se a destruição de D estradas (arestas do grafo) podia significar que dois nós dados A e B passariam a estar "disconexos", ou seja, que podia deixar de haver um caminho possível entre A e B.
A primeira coisa a notar é que isto é a mesma coisa que perguntar se existe maneira de, cortando D estradas, "desligar" os dois nós. Dito de outro modo, queremos destruir "algo" em todos os caminhos possíveis entre A e B.
Pensando no que foi dito no parágrafo anterior, precisamos de saber todos os caminhos entre A e B. Mais precisamente, precisamos de saber caminhos que não partilhem arestas. Se partilharem alguma aresta, para "destruir" estes caminhos basta "destruir" a aresta partilhada.
O problema pode agora ser reduzido a descobrir quantos caminhos sem arestas comuns existem entre A e B. Ora, esta é precisamente uma das aplicações clássicas da descoberta do fluxo máximo entre dois pontos!
Consideremos que a capacidade de cada aresta é 1. Isto garante-nos que apenas passa um caminho nessa aresta. O fluxo máximo entre dois pontos do grafo neste caso passa a indicar precisamente o número de caminhos "edge-independent" entre os dois pontos.
Com tudo isto, resolver o problema passa a ser aplicar um algoritmo de fluxo máximo, um dos algoritmos que até é comum as equipas trazerem nos seus apontamentes. Tendo em conta os limites dados, quase qualquer implementação passaria, como por exemplo um simples Ford-Flukerson. É verdade que poderiamos fazer ainda melhor, aproveitando o facto de o grafo ser não dirigido e a capacidade de cada aresta ser igual a um, mas uma implementação de fluxo máximo "by the book" bastava para ter o problema aceite.