| graph[pos] = {k: 1 for k in adjs} | graph[pos] = {k: 1 for k in adjs} | ||||
| old = {k: v.copy() for k, v in graph.items()} | old = {k: v.copy() for k, v in graph.items()} | ||||
| for k in graph: | for k in graph: | ||||
| graph[k][k] = 0 | graph[k][k] = 0 | ||||
| edge = {k} | edge = {k} | ||||
| if ans > ans1: | if ans > ans1: | ||||
| ans1 = ans | ans1 = ans | ||||
| print(ans1) | print(ans1) | ||||
| def solve2(pending, total, pos_1, t_left_1, pos_2, t_left_2): | |||||
| if not pending: | |||||
| yield total | |||||
| else: | |||||
| if ans2 > total + sum(vals[p] for p in pending) * max(t_left_1, t_left_2): | |||||
| return | |||||
| if t_left_1 >= t_left_2: | |||||
| # move 1 | |||||
| for contrib, pos, t_left in tic(pending, pos_1, t_left_1): | |||||
| yield from solve2(pending - {pos}, total + contrib, pos, t_left, pos_2, t_left_2) | |||||
| else: | |||||
| # move 2 | |||||
| for contrib, pos, t_left in tic(pending, pos_2, t_left_2): | |||||
| yield from solve2(pending - {pos}, total + contrib, pos_1, t_left_1, pos, t_left) | |||||
| ans2 = 0 | |||||
| for ans in solve2(set(vals), 0, 'AA', 26, 'AA', 26): | |||||
| if ans > ans2: | |||||
| ans2 = ans | |||||
| print(ans2) |