def build_dfst(tree, node, visited)
      visited << node
      node.real_successors.each do |other|
        if !visited.include?(other)
          tree.add_edge(node, other)
          build_dfst(tree, other, visited)
        end
      end
    end
def build_dfst(tree, node, visited)
      visited << node
      node.real_successors.each do |other|
        if !visited.include?(other)
          tree.add_edge(node, other)
          build_dfst(tree, other, visited)
        end
      end
    end
builds the dfst from the start node.
 O(|V| + |E|), just like DFS.