Bird
Raised Fist0
DSA Cprogramming~5 mins

Articulation Points in Graph in DSA C - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Articulation Points in Graph
O(V + E)
Understanding Time Complexity

We want to know how the time needed to find articulation points changes as the graph grows.

How does the algorithm's work increase when the graph has more nodes and edges?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


void APUtil(int u, int visited[], int disc[], int low[], int parent[], int ap[], int V, list adj[]) {
    static int time = 0;
    int children = 0;
    visited[u] = 1;
    disc[u] = low[u] = ++time;

    for (auto v : adj[u]) {
        if (!visited[v]) {
            children++;
            parent[v] = u;
            APUtil(v, visited, disc, low, parent, ap, V, adj);
            low[u] = min(low[u], low[v]);
            if (parent[u] == -1 && children > 1)
                ap[u] = 1;
            if (parent[u] != -1 && low[v] >= disc[u])
                ap[u] = 1;
        } else if (v != parent[u]) {
            low[u] = min(low[u], disc[v]);
        }
    }
}

This code finds articulation points using DFS traversal and tracks discovery and low times.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Depth-first search (DFS) visits each vertex and edge once.
  • How many times: Each vertex is visited once; each edge is checked once or twice.
How Execution Grows With Input

As the graph grows, the algorithm visits every node and edge once, so work grows with nodes plus edges.

Input Size (n = vertices, m = edges)Approx. Operations
10 vertices, 15 edgesAbout 25 operations
100 vertices, 200 edgesAbout 300 operations
1000 vertices, 5000 edgesAbout 6000 operations

Pattern observation: The work grows roughly in a straight line with the total number of vertices plus edges.

Final Time Complexity

Time Complexity: O(V + E)

This means the time needed grows linearly with the number of vertices and edges in the graph.

Common Mistake

[X] Wrong: "The algorithm checks every pair of nodes, so it must be O(V²)."

[OK] Correct: The algorithm uses DFS to visit each node and edge only once, not all pairs, so it is faster than O(V²).

Interview Connect

Understanding this linear time complexity helps you explain how graph traversal algorithms efficiently find critical points.

Self-Check

"What if the graph is represented by an adjacency matrix instead of adjacency lists? How would the time complexity change?"

Practice

(1/5)
1. What is an articulation point in a graph?
easy
A. A vertex that has no edges connected to it
B. A vertex with the highest degree in the graph
C. A vertex that, when removed, increases the number of connected components
D. A vertex connected to all other vertices

Solution

  1. Step 1: Understand articulation point definition

    An articulation point is a vertex that, if removed, breaks the graph into more pieces (connected components).
  2. Step 2: Compare options with definition

    Only 'A vertex that, when removed, increases the number of connected components' matches this definition exactly.
  3. Final Answer:

    A vertex that, when removed, increases the number of connected components -> Option C
  4. Quick Check:

    Articulation point = vertex increasing components when removed [OK]
Hint: Articulation point splits graph if removed [OK]
Common Mistakes:
  • Confusing articulation point with highest degree vertex
  • Thinking articulation point is always connected to all vertices
  • Assuming isolated vertices are articulation points
2. Which of the following is the correct way to declare a graph adjacency list in C++ for articulation point detection?
easy
A. int graph[100][100];
B. vector<int> graph[100];
C. int* graph = malloc(sizeof(int) * 100);
D. int graph[100];

Solution

  1. Step 1: Understand adjacency list representation

    An adjacency list stores neighbors for each vertex, best done with an array of vectors in C++ or array of lists in C.
  2. Step 2: Analyze options

    vector<int> graph[100];: vector<int> graph[100]; is correct for adjacency list in C++ (common in DSA). int graph[100][100]; is 2D array (adjacency matrix). int* graph = malloc(sizeof(int) * 100); is incorrect memory allocation. int graph[100]; is single array, insufficient for lists.
  3. Final Answer:

    vector<int> graph[100]; -> Option B
  4. Quick Check:

    Adjacency list = array of vectors [OK]
Hint: Use array of vectors for adjacency list in C++ [OK]
Common Mistakes:
  • Using 2D arrays for adjacency list instead of adjacency matrix
  • Incorrect memory allocation for adjacency list
  • Confusing adjacency list with adjacency matrix
3. Consider the following code snippet for articulation point detection in a graph with 4 vertices (0 to 3):
void dfs(int u, int parent) {
  visited[u] = true;
  disc[u] = low[u] = ++time;
  int children = 0;
  for (int v : graph[u]) {
    if (!visited[v]) {
      children++;
      dfs(v, u);
      low[u] = min(low[u], low[v]);
      if (parent == -1 && children > 1)
        articulation[u] = true;
      if (parent != -1 && low[v] >= disc[u])
        articulation[u] = true;
    } else if (v != parent) {
      low[u] = min(low[u], disc[v]);
    }
  }
}

What will be the value of articulation[1] after running dfs(0, -1) on the graph edges: 0-1, 1-2, 1-3?
medium
A. true
B. false
C. undefined
D. depends on order

Solution

  1. Step 1: Analyze graph structure and DFS

    Graph edges: 0-1, 1-2, 1-3. Vertex 1 connects 0 to 2 and 3. Removing 1 disconnects graph.
  2. Step 2: Apply articulation point logic

    Since 1 is not root (parent != -1) and low[v] >= disc[u] condition holds for children 2 and 3, articulation[1] is set true.
  3. Final Answer:

    true -> Option A
  4. Quick Check:

    Vertex 1 disconnects graph = articulation true [OK]
Hint: Check if removing vertex splits graph [OK]
Common Mistakes:
  • Assuming root node logic applies to vertex 1
  • Ignoring low and disc comparison
  • Confusing parent and child roles in DFS
4. The following code snippet is intended to find articulation points but has a bug. What is the bug?
void dfs(int u, int parent) {
  visited[u] = true;
  disc[u] = low[u] = ++time;
  int children = 0;
  for (int v : graph[u]) {
    if (!visited[v]) {
      children++;
      dfs(v, u);
      low[u] = min(low[u], low[v]);
      if (parent == -1 && children > 1)
        articulation[u] = true;
      if (parent != -1 && low[v] > disc[u])
        articulation[u] = true;
    } else if (v != parent) {
      low[u] = min(low[u], disc[v]);
    }
  }
}
medium
A. The visited array is not updated
B. The variable children is not incremented
C. The parent parameter is not passed correctly
D. The condition low[v] > disc[u] should be low[v] >= disc[u]

Solution

  1. Step 1: Review articulation point condition

    The condition for articulation point when parent != -1 is low[v] >= disc[u], not strictly greater.
  2. Step 2: Identify impact of wrong condition

    Using low[v] > disc[u] misses cases where low[v] == disc[u], causing missed articulation points.
  3. Final Answer:

    The condition low[v] > disc[u] should be low[v] >= disc[u] -> Option D
  4. Quick Check:

    Use >= to detect articulation points correctly [OK]
Hint: Use >= not > for articulation condition [OK]
Common Mistakes:
  • Using > instead of >= in low and disc comparison
  • Forgetting to increment children count
  • Not marking visited vertices
5. Given a connected undirected graph with vertices 0 to 5 and edges: 0-1, 1-2, 2-0, 1-3, 3-4, 4-5, 5-3, which vertices are articulation points?
hard
A. [1,3]
B. [1,4]
C. [0,2,4]
D. [3,5]

Solution

  1. Step 1: Analyze graph structure

    Triangles: 0-1-2 and 3-4-5. Vertex 1 connects 0-1-2 triangle to 3-4-5 cluster via 1-3. Vertex 3 connects 1 to the 3-4-5 triangle.
  2. Step 2: Identify articulation points

    Removing 1 disconnects {0,2} from {3,4,5}. Removing 3 disconnects {0,1,2} from {4,5} (4-5 still connected). So articulation points are 1 and 3.
  3. Final Answer:

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

    Vertices splitting graph = 1 and 3 [OK]
Hint: Check vertices connecting separate cycles [OK]
Common Mistakes:
  • Including vertices inside cycles as articulation points
  • Missing articulation points connecting clusters
  • Confusing articulation points with bridges
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