candidate graph
0
1
2
3
4
call stack
(empty)
Edge-count gate + DFS cycle/connectivity check
▸1if edges.length != n - 1: return false // too few/many2visited = {}3dfs(u, parent):4 mark u visited5 for v in adj[u]:6 if v == parent: continue // skip back-edge7 if v in visited: return false // cycle!8 if not dfs(v, u): return false9 return true10return dfs(0, none) and visited.size == n // connected
state
- n5
- edges4
- needconnected + acyclic