12.py
1 from lib import * 2 3 input = read_input(2017, 12) 4 5 lines = input.splitlines() 6 7 8 edges = {} 9 for line in lines: 10 p, Q = line.split(" <-> ") 11 p = int(p) 12 for q in map(int, Q.split(", ")): 13 edges.setdefault(p, []).append(q) 14 15 queue = [0] 16 visited = set() 17 while queue: 18 p = queue.pop(0) 19 20 if p in visited: 21 continue 22 23 visited.add(p) 24 25 for q in edges.get(p, []): 26 queue.append(q) 27 28 print(len(visited)) 29 30 31 uf = UnionFind(len(lines)) 32 for line in lines: 33 p, Q = line.split(" <-> ") 34 p = int(p) 35 for q in map(int, Q.split(", ")): 36 uf.merge(p, q) 37 38 groups = set() 39 for i in range(len(lines)): 40 groups.add(uf.find(i)) 41 42 print(len(groups))