Reduzindo arestas redundantes a partir de um gráfico de dependência

Eu tenho um DAG de dependências que contém muitas bordas redundantes (veja o exemplo abaixo). Eu quero um algoritmo "rápido" (ou seja, pode manipular um gráfico com vários milhares de nós / arestas) que encontre um sub-gráfico mínimo. Por exemplo: A -> B -> C A -> C nas palavras A é...