Start free

Expert · Graphs · 226 of 264

The extra cable

Cables are added one by one between computers. Print the first cable that joins two computers that were already connected. Use a union-find structure.

Input: n and m, then m lines "a b" in the order they are added. Output: that cable as a b, or none

Examples

Input
3 3
1 2
1 3
2 3
Output
2 3
Input
4 3
1 2
2 3
3 4
Output
none

One more test checks other inputs when you press Check.

Stuck? The idea behind graphs

A graph is places (nodes) joined by edges. Keep it as a dictionary of neighbours: graph[a] is the list of nodes next to a.

Breadth-first search, with a queue, finds the shortest path when every step costs the same; Dijkstra's algorithm, with a heap, when steps cost different amounts.

from collections import deque
graph = {1: [2, 3], 2: [4], 3: [4], 4: []}
dist = {1: 0}
queue = deque([1])
while queue:
    node = queue.popleft()
    for nxt in graph[node]:
        if nxt not in dist:
            dist[nxt] = dist[node] + 1
            queue.append(nxt)
print(dist[4])

Watch for: Mark a node as seen when you add it to the queue, not when you take it out, or it is added many times.

All the graphs exercises
Your code
Opening the code editor…
Python 3.14 in your browser
Output
Run shows what your program prints. Check tests it on every example and the hidden tests.

More graphs exercises