Bird
Raised Fist0
DSA Rustprogramming~5 mins

Bridges in Graph Tarjan's Algorithm in DSA Rust - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a bridge in a graph?
A bridge is an edge in a graph that, if removed, increases the number of connected components. It means the edge is critical for keeping the graph connected.
Click to reveal answer
intermediate
What is the main idea behind Tarjan's algorithm for finding bridges?
Tarjan's algorithm uses a depth-first search (DFS) to assign discovery times and low values to each vertex. An edge is a bridge if the low value of the connected vertex is greater than the discovery time of the current vertex.
Click to reveal answer
intermediate
In Tarjan's algorithm, what does the 'low' value represent?
The 'low' value of a vertex is the earliest discovery time reachable from that vertex by following zero or more edges, including back edges.
Click to reveal answer
advanced
Why do we compare low[v] > disc[u] to find a bridge between u and v?
If low[v] > disc[u], it means vertex v and its descendants cannot reach any ancestor of u without using the edge (u, v). So, removing (u, v) disconnects the graph, making it a bridge.
Click to reveal answer
beginner
What is the time complexity of Tarjan's algorithm for finding bridges?
The time complexity is O(V + E), where V is the number of vertices and E is the number of edges, because it uses a single DFS traversal.
Click to reveal answer
What does a bridge in a graph do?
ADisconnects the graph if removed
BConnects two vertices with the shortest path
CIs part of a cycle
DIs a vertex with highest degree
In Tarjan's algorithm, what is the purpose of the discovery time array?
ATo mark visited vertices only
BTo store the order vertices are visited in DFS
CTo count the number of edges
DTo store the parent of each vertex
What does it mean if low[v] <= disc[u] for an edge (u, v)?
AEdge (u, v) is not a bridge
BEdge (u, v) is a bridge
CVertex v is not reachable
DGraph is disconnected
Which data structure is primarily used in Tarjan's algorithm for bridges?
AQueue
BStack
CDepth-First Search recursion
DPriority Queue
What is the output of Tarjan's algorithm for bridges?
AMinimum spanning tree
BList of all cycles
CShortest path tree
DList of all bridges (critical edges)
Explain how Tarjan's algorithm finds bridges in a graph step-by-step.
Think about how DFS explores and back edges affect low values.
You got /4 concepts.
    Describe the significance of the 'low' value in Tarjan's algorithm and how it helps detect bridges.
    Focus on what low value tells about connectivity.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of Tarjan's algorithm when finding bridges in a graph?
      easy
      A. To detect cycles in a graph
      B. To find the shortest path between two nodes
      C. To find edges that, if removed, increase the number of connected components
      D. To sort nodes in topological order

      Solution

      1. Step 1: Understand what a bridge is in a graph

        A bridge is an edge that, when removed, increases the number of connected components in the graph.
      2. Step 2: Identify Tarjan's algorithm goal

        Tarjan's algorithm finds such edges efficiently by using DFS and tracking discovery and low times.
      3. Final Answer:

        To find edges that, if removed, increase the number of connected components -> Option C
      4. Quick Check:

        Bridges = edges increasing components [OK]
      Hint: Bridges break connectivity when removed [OK]
      Common Mistakes:
      • Confusing bridges with cycles
      • Thinking it finds shortest paths
      • Mixing bridges with articulation points
      2. Which of the following Rust code snippets correctly declares a vector to store adjacency lists for a graph with 5 nodes?
      easy
      A. let graph: Vec = vec![vec![0]; 5];
      B. let graph: Vec<usize> = vec![0; 5];
      C. let graph: Vec = vec![vec![]; 4];
      D. let graph: Vec = vec![vec![]; 5];

      Solution

      1. Step 1: Understand adjacency list representation

        Each node has a vector of neighbors, so graph is a vector of vectors.
      2. Step 2: Check vector initialization for 5 nodes

        vec![vec![]; 5] creates 5 empty vectors, one per node.
      3. Final Answer:

        let graph: Vec = vec![vec![]; 5]; -> Option D
      4. Quick Check:

        Adjacency list for 5 nodes = vec![vec![]; 5] [OK]
      Hint: Use vec![vec![]; n] for adjacency lists [OK]
      Common Mistakes:
      • Using wrong vector type (Vec<usize> instead of Vec)
      • Initializing with wrong size
      • Filling inner vectors with zeros instead of empty
      3. Given the following Rust code snippet implementing part of Tarjan's algorithm, what will be printed as bridges for the graph edges?
      let edges = vec![(0,1), (1,2), (2,0), (1,3)];
      // Graph: triangle 0-1-2 and a bridge edge 1-3
      // After running Tarjan's algorithm, which edges are bridges?
      println!("Bridges: {:?}", vec![(1,3)]);
      medium
      A. Bridges: [(1, 3)]
      B. Bridges: [(0, 1), (1, 2), (2, 0)]
      C. Bridges: []
      D. Bridges: [(0, 3)]

      Solution

      1. Step 1: Analyze the graph structure

        The edges (0,1), (1,2), (2,0) form a cycle (triangle), so none are bridges.
      2. Step 2: Identify the bridge edge

        The edge (1,3) connects node 3 to the triangle and is a bridge because removing it disconnects node 3.
      3. Final Answer:

        Bridges: [(1, 3)] -> Option A
      4. Quick Check:

        Only edge (1,3) breaks connectivity [OK]
      Hint: Edges in cycles are not bridges [OK]
      Common Mistakes:
      • Marking cycle edges as bridges
      • Ignoring leaf node connections
      • Confusing bridge edges with articulation points
      4. Identify the bug in this Rust snippet of Tarjan's algorithm for finding bridges:
      fn dfs(u: usize, parent: usize, graph: &Vec, disc: &mut Vec<usize>, low: &mut Vec<usize>, time: &mut usize, bridges: &mut Vec<(usize, usize)>) {
          disc[u] = *time;
          low[u] = *time;
          *time += 1;
          for &v in &graph[u] {
              if v == parent {
                  continue;
              }
              if disc[v] == 0 {
                  dfs(v, u, graph, disc, low, time, bridges);
                  low[u] = low[u].min(low[v]);
                  if low[v] > disc[u] {
                      bridges.push((u, v));
                  }
              } else {
                  low[u] = low[u].min(disc[v]);
              }
          }
      }
      medium
      A. disc and low arrays are not initialized with zeros
      B. The parent check should be if v != parent instead of v == parent
      C. The time variable should be passed by value, not mutable reference
      D. The condition low[v] > disc[u] should be low[v] < disc[u]

      Solution

      1. Step 1: Check initialization of disc and low arrays

        disc and low must be initialized with zeros to detect unvisited nodes (disc[v] == 0).
      2. Step 2: Verify other logic correctness

        Parent check and time passing are correct; condition low[v] > disc[u] is correct for bridges.
      3. Final Answer:

        disc and low arrays are not initialized with zeros -> Option A
      4. Quick Check:

        Uninitialized disc causes wrong visited checks [OK]
      Hint: Initialize disc and low with zeros before DFS [OK]
      Common Mistakes:
      • Not initializing disc and low arrays
      • Wrong parent check condition
      • Passing time by value instead of mutable reference
      5. You have a graph with 6 nodes and edges: (0,1), (1,2), (2,0), (1,3), (3,4), (4,5), (5,3). Using Tarjan's algorithm, which edges are bridges in this graph?
      hard
      A. [(3, 4), (4, 5), (5, 3)]
      B. [(1, 3)]
      C. [(0, 1), (1, 2), (2, 0)]
      D. [(1, 3), (3, 4)]

      Solution

      1. Step 1: Analyze graph components

        Nodes 0,1,2 form a cycle (triangle), so edges among them are not bridges. Nodes 3,4,5 form a cycle, so edges among them are not bridges.
      2. Step 2: Identify bridge edges

        The edge (1,3) connects the two cycles. Removing (1,3) disconnects the graph, so it is a bridge.
      3. Final Answer:

        [(1, 3)] -> Option B
      4. Quick Check:

        Only edge connecting components is bridge [OK]
      Hint: Bridges connect separate cycles or components [OK]
      Common Mistakes:
      • Marking cycle edges as bridges
      • Ignoring connectivity between components
      • Confusing bridges with articulation points
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard