Bird
Raised Fist0
DSA Pythonprogramming~20 mins

Articulation Points in Graph in DSA Python - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Articulation Points Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of articulation points detection on a simple graph
What is the output of the following code that finds articulation points in the given graph?
DSA Python
def articulation_points(graph):
    time = 0
    visited = set()
    disc = {}
    low = {}
    parent = {}
    ap = set()

    def dfs(u):
        nonlocal time
        visited.add(u)
        disc[u] = time
        low[u] = time
        time += 1
        children = 0

        for v in graph[u]:
            if v not in visited:
                parent[v] = u
                children += 1
                dfs(v)
                low[u] = min(low[u], low[v])

                if u not in parent and children > 1:
                    ap.add(u)
                if u in parent and low[v] >= disc[u]:
                    ap.add(u)
            elif v != parent.get(u, None):
                low[u] = min(low[u], disc[v])

    for vertex in graph:
        if vertex not in visited:
            dfs(vertex)

    return sorted(ap)

graph = {
    0: [1, 2],
    1: [0, 2],
    2: [0, 1, 3, 5],
    3: [2, 4],
    4: [3],
    5: [2, 6, 7],
    6: [5, 7],
    7: [5, 6]
}

print(articulation_points(graph))
A[2, 3, 5]
B[0, 2, 5]
C[2, 4, 5]
D[1, 3, 6]
Attempts:
2 left
💡 Hint
Look for vertices that, when removed, increase the number of connected components.
🧠 Conceptual
intermediate
1:30remaining
Understanding articulation points in a graph
Which of the following statements about articulation points in an undirected graph is TRUE?
AAn articulation point is a vertex that has no edges connected to it.
BAn articulation point is a vertex with the highest degree in the graph.
CAn articulation point is always a leaf node in the graph.
DAn articulation point is a vertex that, when removed, increases the number of connected components.
Attempts:
2 left
💡 Hint
Think about the effect of removing a vertex on graph connectivity.
🔧 Debug
advanced
2:00remaining
Identify the error in articulation points code snippet
What error will the following code produce when run on a connected graph? ```python def find_ap(graph): time = 0 visited = set() disc = {} low = {} parent = {} ap = set() def dfs(u): visited.add(u) disc[u] = time low[u] = time time += 1 children = 0 for v in graph[u]: if v not in visited: parent[v] = u children += 1 dfs(v) low[u] = min(low[u], low[v]) if u not in parent and children > 1: ap.add(u) if u in parent and low[v] >= disc[u]: ap.add(u) elif v != parent.get(u, None): low[u] = min(low[u], disc[v]) for vertex in graph: if vertex not in visited: dfs(vertex) return ap ```
AKeyError when accessing parent dictionary
BUnboundLocalError: local variable 'time' referenced before assignment
CRecursionError due to infinite recursion
DNo error, code runs correctly
Attempts:
2 left
💡 Hint
Check how the variable 'time' is modified inside the nested function.
❓ Predict Output
advanced
2:00remaining
Output of articulation points on a disconnected graph
What is the output of the code below that finds articulation points in a disconnected graph?
DSA Python
graph = {
    0: [1],
    1: [0, 2],
    2: [1],
    3: [4],
    4: [3, 5, 6],
    5: [4],
    6: [4]
}

print(articulation_points(graph))

# articulation_points function is same as in challenge c1
A[2, 5, 6]
B[0, 3]
C[1, 4]
D[1, 3, 4]
Attempts:
2 left
💡 Hint
Check articulation points in each connected component separately.
🧠 Conceptual
expert
2:30remaining
Articulation points and bridge edges relationship
Which statement correctly describes the relationship between articulation points and bridge edges in an undirected graph?
AEvery bridge edge connects to exactly one articulation point.
BEvery articulation point is connected to at least one bridge edge, but not every bridge edge connects to an articulation point.
CArticulation points and bridge edges are unrelated concepts.
DEvery bridge edge connects two articulation points.
Attempts:
2 left
💡 Hint
Think about how removing a bridge edge affects connectivity and which vertices are articulation points.

Practice

(1/5)
1. What is an articulation point in a graph?
easy
A. A vertex connected to all other vertices
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 that forms a cycle with its neighbors

Solution

  1. Step 1: Understand the definition of articulation point

    An articulation point is a vertex in a graph whose removal disconnects the graph or increases the number of connected components.
  2. Step 2: Compare options with definition

    A vertex that, when removed, increases the number of connected components matches this definition exactly. Other options describe different concepts.
  3. Final Answer:

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

    Articulation point = vertex disconnecting graph [OK]
Hint: Articulation point breaks graph connectivity when removed [OK]
Common Mistakes:
  • Confusing articulation point with highest degree vertex
  • Thinking articulation point forms cycles
  • Assuming articulation point connects to all vertices
2. Which of the following is the correct way to initialize the discovery time array for articulation point detection in Python?
easy
A. discovery = list(range(n))
B. discovery = [-1] * n
C. discovery = [0] * n
D. discovery = None

Solution

  1. Step 1: Understand initialization purpose

    The discovery time array stores the time when each vertex is first visited. Initializing with -1 means unvisited.
  2. Step 2: Check options

    discovery = [-1] * n initializes all values to -1, indicating unvisited vertices. discovery = [0] * n sets all to 0, which can be confused with a valid time. discovery = list(range(n)) assigns increasing numbers, which is incorrect. discovery = None sets None, which is invalid for indexing.
  3. Final Answer:

    discovery = [-1] * n -> Option B
  4. Quick Check:

    Unvisited vertices marked as -1 [OK]
Hint: Use -1 to mark unvisited nodes in discovery array [OK]
Common Mistakes:
  • Initializing discovery with zeros causing confusion
  • Using range which sets wrong discovery times
  • Setting discovery to None causing errors
3. What will be the output articulation points for the following graph represented as adjacency list?
graph = {0: [1, 2], 1: [0, 2], 2: [0, 1, 3], 3: [2, 4, 5], 4: [3, 5], 5: [3, 4]}
medium
A. [2, 3]
B. [0, 3]
C. [1, 4]
D. [3]

Solution

  1. Step 1: Analyze graph structure

    Vertices 0,1,2 form a triangle (cycle). Vertex 3 connects this triangle to vertices 4 and 5, which form another cycle.
  2. Step 2: Identify articulation points

    Removing vertex 2 disconnects vertex 3 and its connected cycle from the triangle. Removing vertex 3 disconnects vertices 4 and 5 from the rest. So articulation points are 2 and 3.
  3. Final Answer:

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

    Vertices breaking connectivity = 2, 3 [OK]
Hint: Check vertices connecting two or more components [OK]
Common Mistakes:
  • Ignoring articulation point at vertex 2
  • Missing vertex 3 as articulation point
  • Confusing cycle vertices as articulation points
4. Identify the bug in this articulation point detection code snippet:
def dfs(u, parent):
    visited[u] = True
    discovery[u] = time
    low[u] = time
    time += 1
    children = 0
    for v in graph[u]:
        if not visited[v]:
            children += 1
            dfs(v, u)
            low[u] = min(low[u], low[v])
            if parent != -1 and low[v] >= discovery[u]:
                articulation[u] = True
        elif v != parent:
            low[u] = min(low[u], discovery[v])
    if parent == -1 and children > 1:
        articulation[u] = True
medium
A. Variable 'time' is not declared global or passed, causing incorrect increments
B. The condition 'low[v] >= discovery[u]' should be '>' instead of '>='
C. The 'children' count is not incremented correctly
D. The check 'elif v != parent' should be 'if v == parent'

Solution

  1. Step 1: Check variable usage in recursion

    The variable 'time' is incremented inside dfs but not declared global or passed as argument, so increments won't persist across calls.
  2. Step 2: Verify other conditions

    Conditions and increments for 'children' and articulation logic are correct. The 'elif' condition is also correct to update low values.
  3. Final Answer:

    Variable 'time' is not declared global or passed, causing incorrect increments -> Option A
  4. Quick Check:

    Global time needed for correct discovery times [OK]
Hint: Declare 'time' global or pass it to update correctly [OK]
Common Mistakes:
  • Not declaring 'time' global causing discovery errors
  • Changing condition '>=' to '>' incorrectly
  • Miscounting children in DFS
  • Incorrectly checking parent in else condition
5. Given a connected undirected graph with 7 vertices and edges:
edges = [(0,1),(1,2),(2,0),(1,3),(3,4),(4,5),(5,3),(5,6)]
Which vertices are articulation points?
hard
A. [0, 3, 6]
B. [2, 4, 5]
C. [1, 4, 6]
D. [1, 3, 5]

Solution

  1. Step 1: Analyze graph structure

    Vertices 0,1,2 form a triangle (cycle). Vertex 1 connects to vertex 3, which connects to a cycle 3-4-5 and vertex 5 connects to 6.
  2. Step 2: Identify articulation points

    Removing vertex 1 disconnects 3 and beyond from 0 and 2. Removing vertex 3 disconnects 4 and 5 from 1. Removing vertex 5 disconnects 6 from the rest. So articulation points are 1, 3, and 5.
  3. Final Answer:

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

    Vertices disconnecting parts = 1, 3, 5 [OK]
Hint: Find vertices connecting cycles or leaf nodes [OK]
Common Mistakes:
  • Missing vertex 1 as articulation point
  • Including leaf vertex 6 incorrectly
  • Ignoring vertex 5's role in connectivity
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