1. Build adjacency list.
2. Initialize disc[v] = -1, low[v] = 0, timer=0, result=set().
3. For each unvisited vertex, run DFS with isRoot=true:
- Set
disc[v] = low[v] = timer, timer++, children=0 - For each neighbor w: if unvisited, recurse, children++, update
low[v], checklow[w] >= disc[v]; if visited (not parent), updatelow[v] - If isRoot and children≥2, add v to result
4. Return result.
This runs in O(V+E) time and uses O(V) space.