algorithmtime-complexitygraph-theorydirected-graphedges

Given an directed acyclic graph, create a strategy so that there is a bidirectional path between all possible Vertices


Given an directed acyclic graph, create a strategy so that there is a bidirectional path between all possible Vertices

You can attain this by adding edges. Propose a strategy for solving this with adding as little edges as possible A Vertice on the input graph can be without edges.

EXAMPLE: input acyclic directed graph To solve this graph the most efficient way, we need to add ONLY 2 edges: solved directed graph with every vertice having biderectional path to another vertice

Keep in mind that the algorithm doesn't need to be perfect, also NO NEED to code anything (unless you want to:)).


Solution

  • Consider a DAG that has m vertices with in-degree 0 and n vertices with out-degree 0:

    Obviously, you will need to add m edges incoming to the in-degree 0 vertices, and n edges outgoing from the out-degree 0 vertices, so the best you can hope for is max(m,n) new edges. We can achieve this.

    First, if m > n, then connect in-degree 0 vertices until m = n. Otherwise connect out-degree 0 vertices until m = n.

    Now we have m=n, which we will maintain: