Bird
Raised Fist0
DSA C++programming~5 mins

Bridges in Graph Tarjan's Algorithm in DSA C++ - 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 disconnects part of the graph.
Click to reveal answer
intermediate
What is the main idea behind Tarjan's algorithm for finding bridges?
Tarjan's algorithm uses DFS to assign discovery times and low values to nodes. An edge is a bridge if the low value of the connected node is greater than the discovery time of the current node.
Click to reveal answer
intermediate
In Tarjan's algorithm, what does the 'low' value represent?
The 'low' value of a node is the earliest discovery time reachable from that node or its descendants, including back edges.
Click to reveal answer
advanced
Why do we compare low[v] > disc[u] to find a bridge on edge (u, v)?
If low[v] > disc[u], it means v and its descendants cannot reach u or any ancestor of u through a back edge, so removing edge (u, v) disconnects the graph.
Click to reveal answer
beginner
What data structures are typically used in Tarjan's algorithm for bridges?
Arrays or vectors for discovery times (disc), low values (low), a visited set or array, and adjacency lists for the graph representation.
Click to reveal answer
What does a bridge in a graph do?
ACreates a cycle
BDisconnects the graph if removed
CConnects two nodes with multiple paths
DIs always part of a cycle
In Tarjan's algorithm, what does the discovery time represent?
AThe number of edges connected to a node
BThe total number of nodes in the graph
CThe lowest reachable node from a node
DThe order in which nodes are visited in DFS
Which condition identifies a bridge in Tarjan's algorithm?
Alow[v] > disc[u]
Blow[u] > disc[v]
Cdisc[u] > disc[v]
Dlow[u] == low[v]
What is the purpose of the 'low' array in Tarjan's algorithm?
ATo store node degrees
BTo count the number of edges
CTo store the earliest visited vertex reachable
DTo mark visited nodes
Which graph traversal method does Tarjan's algorithm use?
ADepth-First Search (DFS)
BBreadth-First Search (BFS)
CDijkstra's Algorithm
DPrim's Algorithm
Explain how Tarjan's algorithm finds bridges in a graph using discovery and low values.
Think about how DFS explores nodes and how low values track back edges.
You got /5 concepts.
    Describe the role of back edges in Tarjan's algorithm for bridges.
    Consider how back edges allow reaching earlier nodes in DFS.
    You got /4 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 count the total number of edges in the graph

      Solution

      1. Step 1: Understand the definition of a bridge

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

        Tarjan's algorithm efficiently finds such edges 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 when removed [OK]
      Hint: Bridges disconnect graph if removed [OK]
      Common Mistakes:
      • Confusing bridges with cycles
      • Thinking it finds shortest paths
      • Assuming it counts edges only
      2. Which of the following is the correct way to declare the discovery time array in C++ for Tarjan's bridge-finding algorithm on a graph with n vertices?
      easy
      A. int disc[n];
      B. vector<int> disc(n, -1);
      C. int disc = new int[n];
      D. int disc[] = new int();

      Solution

      1. Step 1: Understand C++ array and vector declarations

        Static arrays like int disc[n]; are not standard in C++ (unless n is a constant). Using vector<int> is safer and dynamic.
      2. Step 2: Identify correct initialization for discovery times

        Initializing with -1 indicates unvisited nodes, which is common practice.
      3. Final Answer:

        vector<int> disc(n, -1); -> Option B
      4. Quick Check:

        Use vector with size and initial value [OK]
      Hint: Use vector<int> with size and init value [OK]
      Common Mistakes:
      • Using variable-length arrays (not standard C++)
      • Incorrect pointer syntax
      • Not initializing discovery times
      3. Consider the following C++ code snippet using Tarjan's algorithm to find bridges. What will be the output bridges for the given graph edges?
      int n = 4;
      vector<int> graph[4];
      graph[0].push_back(1);
      graph[1].push_back(0);
      graph[1].push_back(2);
      graph[2].push_back(1);
      graph[2].push_back(3);
      graph[3].push_back(2);
      // After running Tarjan's bridge finder, which edges are bridges?
      // Edges are represented as pairs (u, v) with u < v
      
      medium
      A. [(0, 1), (1, 2), (2, 3)]
      B. [(0, 1), (1, 2)]
      C. [(0, 1), (2, 3)]
      D. []

      Solution

      1. Step 1: Visualize the graph structure

        The graph is a chain: 0 - 1 - 2 - 3 with bidirectional edges, forming a path with no cycles.
      2. Step 2: Apply Tarjan's bridge finding logic

        In a path graph (a tree), every edge is a bridge because removing any disconnects the graph. Tarjan's DFS will detect all three edges where low[v] > disc[u] for each tree edge.
      3. Final Answer:

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

        All edges in path are bridges [OK]
      Hint: All edges in chain are bridges [OK]
      Common Mistakes:
      • Ignoring edge (0,1) as a bridge
      • Assuming no bridges in chain
      • Confusing bridge with cycle edges
      4. Identify the bug in the following Tarjan's algorithm snippet for finding bridges:
      void dfs(int u, int parent) {
        visited[u] = true;
        disc[u] = low[u] = time++;
        for (int v : graph[u]) {
          if (v == parent) continue;
          if (!visited[v]) {
            dfs(v, u);
            low[u] = min(low[u], low[v]);
            if (low[v] > disc[u])
              bridges.push_back({u, v});
          } else {
            low[u] = min(low[u], disc[v]);
          }
        }
      }
      
      medium
      A. Missing initialization of time variable before DFS
      B. Incorrect comparison in if condition for bridge detection
      C. Not marking nodes as visited
      D. Not checking for parent node in adjacency

      Solution

      1. Step 1: Review the DFS function variables

        The variable 'time' is used to assign discovery times but is not shown initialized before DFS calls.
      2. Step 2: Understand impact of uninitialized time

        If 'time' is not initialized to 0 before DFS, discovery and low times will be incorrect, causing wrong bridge detection.
      3. Final Answer:

        Missing initialization of time variable before DFS -> Option A
      4. Quick Check:

        Initialize time = 0 before DFS [OK]
      Hint: Initialize time counter before DFS call [OK]
      Common Mistakes:
      • Forgetting to initialize time
      • Confusing low and disc arrays
      • Not skipping parent node in DFS
      5. Given a connected undirected graph with n vertices and m edges, how can Tarjan's algorithm be adapted to find all bridges efficiently, and what is its time complexity?
      hard
      A. Use Dijkstra's algorithm; time complexity O(m log n)
      B. Use BFS with distance arrays; time complexity O(n^2)
      C. Use DFS without low arrays; time complexity O(m^2)
      D. Use DFS with discovery and low arrays; time complexity O(n + m)

      Solution

      1. Step 1: Describe Tarjan's algorithm adaptation

        Tarjan's algorithm uses DFS traversal, tracking discovery times and low values to detect bridges efficiently.
      2. Step 2: Analyze time complexity

        Each vertex and edge is visited once during DFS, so the time complexity is O(n + m), where n is vertices and m is edges.
      3. Final Answer:

        Use DFS with discovery and low arrays; time complexity O(n + m) -> Option D
      4. Quick Check:

        DFS + low arrays = O(n + m) [OK]
      Hint: DFS with low arrays runs in linear time [OK]
      Common Mistakes:
      • Using BFS which is not suitable here
      • Ignoring low arrays in DFS
      • Confusing with shortest path algorithms
      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