Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- import math
- def main():
- N = int(sys.stdin.readline())
- dist = lambda a, b: math.sqrt((a[0] - b[0]) ** 2 + (a[1] - b[1]) ** 2)
- dots = [tuple(map(int, sys.stdin.readline().split())) for _ in range(N)]
- check = [i + 1 for i in range(N)]
- edges = []
- for i in range(N):
- for j in range(i + 1, N):
- edges.append((dist(dots[i], dots[j]), j + 1, i + 1))
- ans = 0.0
- ans_dots = []
- for edge in sorted(edges):
- if (check[edge[1] - 1] is not check[edge[-1] - 1]):
- ans += edge[0]
- ed1 = check[edge[-1] - 1]
- ed2 = check[edge[1] - 1]
- ans_dots.append((edge[-1], edge[1]))
- for i in range(N):
- if check[i] is ed1:
- check[i] = ed2
- if len(ans_dots) is len(dots) - 1:
- break
- sys.stdout.write(f'{format(ans, ".6f")}\n{len(ans_dots)}\n')
- for k in ans_dots:
- sys.stdout.write(f'{k[0]} {k[1]}\n')
- if __name__ == '__main__':
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement