Олимпиадный тренинг

Задача . E. Бинарное дерево на плоскости


Корневое дерево — это ориентированный ациклический граф, в котором есть одна вершина (корень), из которой существует ровно один путь до любой другой вершины.

Корневое дерево называется бинарным, если каждая вершина имеет не более двух исходящих дуг.

Когда бинарное дерево рисуют на плоскости, все дуги должны быть направлены сверху вниз. То есть для каждой дуги из u в v должно выполняться: yu > yv.

Вам даны координаты всех вершин дерева. Ваша задача — соединить эти вершины дугами так, чтобы получилось бинарное корневое дерево, и суммарная длина дуг была минимальна. Все дуги построенного дерева должны быть направлены сверху вниз.

Входные данные

В первой строке записано одно целое число n (2 ≤ n ≤ 400) — количество вершин в дереве. Далее следует n строк по два целых числа в каждой: xi, yi (|xi|, |yi| ≤ 103) — координаты вершин дерева. Гарантируется, что все точки различны.

Выходные данные

Если невозможно построить бинарное дерево на данных точках, выведите «-1». Иначе выведите одно вещественное число — суммарную длину дуг в минимальном бинарном дереве. Ответ будет засчитан, если абсолютная или относительная погрешность не превосходит 10 - 6.


Примеры
Входные данныеВыходные данные
1 3
0 0
1 0
2 1
3.650281539872885
2 4
0 0
1 0
2 1
2 0
-1

time 3000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя