/ Python / 2017 / 12.py
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))