UVA 10305
Esse problema é uma aplicação direta do algoritmo apresentado em: http://bit.ly/topsort
Você deve implementar um DFS normalmente.
Mas toda vez que você terminar de visitar um nó e todos os seus filhos, ou seja, quando for na hora de pintar ele de preto, adicione ele no início de uma fila.
Assim, ao final do processo, os nós que forem pintados de preto por último, estarão no início da fila.
Poderíamos utilizar uma estrutura de pilha para isso. No meu caso, utilizei um "deque". No momento de colocar nesse fila, chamei:
topological_sort.push_front(u);
Lembre também de visitar todos os nós, pois o grafo pode não ser conectado.
No fim, na função main(), basta imprimir a sua lista criada.