Bird
Raised Fist0
DSA Javascriptprogramming~10 mins

Articulation Points in Graph in DSA Javascript - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to initialize the discovery time array for all vertices.

DSA Javascript
const disc = new Array(V).fill([1]);
Drag options to blanks, or click blank then click option'
A-1
B0
Cnull
DInfinity
Attempts:
3 left
💡 Hint
Common Mistakes
Using 0 instead of -1 causes confusion between visited and unvisited nodes.
Using null or Infinity is not standard for discovery times.
2fill in blank
medium

Complete the code to update the low time of u after visiting v.

DSA Javascript
low[u] = Math.min(low[u], [1]);
Drag options to blanks, or click blank then click option'
Alow[v]
Bv
Cdisc[v]
Ddisc[u]
Attempts:
3 left
💡 Hint
Common Mistakes
Using disc[v] instead of low[v] misses back edges in v's subtree.
Using disc[u] or v is incorrect for updating low[u].
3fill in blank
hard

Fix the error in the condition to check if u is an articulation point when u is root.

DSA Javascript
if (parent[u] === -1 && [1] > 1) {
  ap[u] = true;
}
Drag options to blanks, or click blank then click option'
Adisc[u]
Blow[u]
Cchildren
Dvisited[u]
Attempts:
3 left
💡 Hint
Common Mistakes
Using low[u] or disc[u] instead of children count.
Checking visited[u] is irrelevant here.
4fill in blank
hard

Fill both blanks to check if u is an articulation point when u is not root.

DSA Javascript
if (parent[u] !== -1 && [1] >= [2]) {
  ap[u] = true;
}
Drag options to blanks, or click blank then click option'
Alow[v]
Bdisc[u]
Cdisc[v]
Dlow[u]
Attempts:
3 left
💡 Hint
Common Mistakes
Swapping disc[u] and disc[v] or low[u] and low[v].
Using disc[v] instead of low[v] causes wrong checks.
5fill in blank
hard

Fill all three blanks to complete the DFS function header and recursive call.

DSA Javascript
function dfs([1], [2], [3]) {
  // DFS logic here
}
Drag options to blanks, or click blank then click option'
Au
Bparent
Cvisited
Dgraph
Attempts:
3 left
💡 Hint
Common Mistakes
Using visited instead of graph as parameter.
Missing parent parameter causes incorrect articulation point detection.

Practice

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

Solution

  1. Step 1: Understand the definition of articulation point

    An articulation point is a vertex that, if removed, increases the number of disconnected parts in the graph.
  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 A
  4. Quick Check:

    Articulation point = vertex increasing components when removed [OK]
Hint: Articulation point breaks graph connectivity when 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 initialize a graph adjacency list in JavaScript for articulation point detection?
easy
A. const graph = Array.from({ length: n }, () => []);
B. const graph = new Array(n).fill([]);
C. const graph = Array(n).fill(null);
D. const graph = new Map();

Solution

  1. Step 1: Understand adjacency list initialization

    We need an array of separate empty arrays for each vertex to store neighbors.
  2. Step 2: Analyze options

    const graph = new Array(n).fill([]); uses fill([]), which fills all positions with the same array reference (wrong). const graph = Array.from({ length: n }, () => []); uses Array.from with a function returning new arrays, so each vertex has its own array (correct). const graph = Array(n).fill(null); fills with null, not arrays. const graph = new Map(); uses Map, which is valid but not the typical adjacency list array.
  3. Final Answer:

    const graph = Array.from({ length: n }, () => []); -> Option A
  4. Quick Check:

    Separate arrays per vertex = const graph = Array.from({ length: n }, () => []); [OK]
Hint: Use Array.from with function to create separate arrays [OK]
Common Mistakes:
  • Using fill([]) creates shared references causing bugs
  • Initializing with null instead of arrays
  • Confusing Map with adjacency list array
3. Consider the following JavaScript code snippet for finding articulation points in a graph with 4 vertices (0 to 3):
const graph = [[1,2],[0],[0,3],[2]];
const visited = [false, false, false, false];
const disc = [0, 0, 0, 0];
const low = [0, 0, 0, 0];
const parent = [-1, -1, -1, -1];
const ap = [false, false, false, false];
let time = 0;

function dfs(u) {
  visited[u] = true;
  disc[u] = low[u] = ++time;
  let children = 0;
  for (const v of graph[u]) {
    if (!visited[v]) {
      children++;
      parent[v] = u;
      dfs(v);
      low[u] = Math.min(low[u], low[v]);
      if (parent[u] === -1 && children > 1) ap[u] = true;
      if (parent[u] !== -1 && low[v] >= disc[u]) ap[u] = true;
    } else if (v !== parent[u]) {
      low[u] = Math.min(low[u], disc[v]);
    }
  }
}

dfs(0);
console.log(ap);

What will be the output printed?
medium
A. [false, false, false, false]
B. [true, false, true, false]
C. [true, true, false, false]
D. [false, true, true, false]

Solution

  1. Step 1: Trace DFS and articulation point logic

    Start DFS at 0: children are 1 and 2. For root (0), if children > 1, ap[0] = true. So 0 is articulation point. For vertex 2, low[3] >= disc[2] triggers ap[2] = true.
  2. Step 2: Determine articulation points array

    Vertices 0 and 2 are articulation points, others are not. So ap = [true, false, true, false].
  3. Final Answer:

    [true, false, true, false] -> Option B
  4. Quick Check:

    Root with >1 child and low[v]>=disc[u] mark articulation points [OK]
Hint: Root with multiple children and low[v]>=disc[u] mark articulation points [OK]
Common Mistakes:
  • Ignoring root special case with multiple children
  • Confusing low and disc arrays
  • Not updating low[u] on back edges
4. The following code attempts to find articulation points but has a bug:
function dfs(u) {
  visited[u] = true;
  disc[u] = low[u] = ++time;
  let children = 0;
  for (const v of graph[u]) {
    if (!visited[v]) {
      children++;
      parent[v] = u;
      dfs(v);
      low[u] = Math.min(low[u], low[v]);
      if (low[v] >= disc[u]) ap[u] = true;
    } else if (v !== parent[u]) {
      low[u] = Math.min(low[u], disc[v]);
    }
  }
}

What is the bug in this code?
medium
A. It does not mark visited vertices
B. It uses '>' instead of '>=' in the articulation point check
C. It does not update parent array correctly
D. It misses the root vertex articulation point condition

Solution

  1. Step 1: Analyze articulation point conditions

    The code checks if low[v] >= disc[u] to mark articulation points but misses the special case for root vertex which requires children > 1.
  2. Step 2: Identify missing root condition

    Without checking if u is root and has multiple children, root articulation points won't be detected.
  3. Final Answer:

    It misses the root vertex articulation point condition -> Option D
  4. Quick Check:

    Root articulation point requires separate children > 1 check [OK]
Hint: Always check root vertex children count separately [OK]
Common Mistakes:
  • Forgetting root vertex special case
  • Using wrong comparison operator in articulation check
  • Not updating parent array before DFS call
5. Given a connected undirected graph with 5 vertices and edges: 0-1, 1-2, 2-0, 1-3, 3-4, which vertices are articulation points?
hard
A. [1]
B. [0, 1, 3]
C. [1, 3]
D. [3, 4]

Solution

  1. Step 1: Visualize the graph and connections

    Vertices 0,1,2 form a triangle. Vertex 1 connects to 3, which connects to 4.
  2. Step 2: Identify articulation points

    Removing 1 disconnects 3 and 4 from the rest, so 1 is articulation point. Removing 3 disconnects 4, so 3 is articulation point. 0,2,4 are not articulation points.
  3. Final Answer:

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

    Vertices connecting subgraphs are articulation points [OK]
Hint: Articulation points connect separate graph parts [OK]
Common Mistakes:
  • Including vertices inside cycles as articulation points
  • Missing leaf node articulation points
  • 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