23_lanparty.py 908 B

1234567891011121314151617181920212223242526272829
  1. #!/usr/bin/env python3
  2. import sys
  3. def parse(f):
  4. network = {}
  5. for line in f:
  6. a, b = line.rstrip().split('-')
  7. network.setdefault(a, set()).add(b)
  8. network.setdefault(b, set()).add(a)
  9. return network
  10. def max_cliques(graph):
  11. # https://en.wikipedia.org/wiki/Bron%E2%80%93Kerbosch_algorithm
  12. def bron_kerbosch(r, p, x):
  13. if not p and not x:
  14. yield ','.join(sorted(r))
  15. while p:
  16. v = p.pop()
  17. yield from bron_kerbosch(r | {v}, p & graph[v], x & graph[v])
  18. x.add(v)
  19. yield from bron_kerbosch(set(), set(graph), set())
  20. network = parse(sys.stdin)
  21. print(len(set(''.join(sorted((a, b, c)))
  22. for a, network_a in network.items()
  23. for b in network_a
  24. for c in network[b]
  25. if a in network[c] and 't' in a[0] + b[0] + c[0])))
  26. print(max(max_cliques(network), key=len))