Codeforces Round 422 (Div. 2) |
---|
Закончено |
В университете Павлополиса начинается второй семестр. После отдыха в Вичкополисе Нура вынуждена вернуться в Павлополис и продолжить обучение.
Иногда (или достаточно часто) встречаются преподаватели, которым вы не нравитесь. Вот и у Нуры есть такой. Зовут его Юрий Дмитриевич и он преподает теорию графов. Нура совсем не нравится Юрию Дмитриевичу, поэтому он всегда даёт девушке самые сложные задания. Так случилось и на этот раз.
Преподаватель даёт Нуре дерево из n вершин. Вершины пронумерованы целыми числами от 1 до n. Длины всех ребер этого дерева равны 1. Нура выбирает некоторое множество простых путей, которые попарно не пересекаются по ребрам. При этом каждая вершина должна принадлежать хотя бы одному из выбранных путей.
Для каждого из выбранных путей выполняется следующее:
Поясним, как происходит движение точки на примере. Пусть путь состоит из двух ребер (v1, v2) и (v2, v3), точка изначально стоит на ребре (v1, v2) и начнет свое движение к вершине v1. Достигнет v1, затем «развернётся», так как был достигнут конец пути, начнет движение к v2, оттуда к v3, там снова «развернётся», переместится к v2 и так далее. При этом скорость движения точек равна 1 ребро в секунду. Например, за 0.5 секунды точка перемещается на длину половины ребра.
В каждую вершину дерева помещается секундомер. Время, которое показывают секундомеры в начальный момент времени, равно 0 секунд. Затем в начальный момент времени все точки одновременно начинают движения с выбранных позиций в выбранные направления по выбранным путям, а секундомеры одновременно запускаются. Когда какая-то из точек достигает вершины v, секундомер в вершине v автоматически обнуляется, то есть начинает считать время с нуля.
Обозначим за resv — максимальное время, которое покажет секундомер в вершине v, если процесс движения точек будет продолжаться бесконечно. Нуру просят выбрать пути и точки на них так, чтобы res1 было минимально возможным. Если вариантов сделать это несколько, необходимо минимизировать res2, затем res3, res4, ..., resn.
Помогите Нуре выполнить задание преподавателя.
Для лучшего понимания условия задачи смотрите пояснение к примерам.
В первой строке строке задано одно целое число n (2 ≤ n ≤ 100) — количество вершин в заданном преподавателем дереве.
В последующих n - 1 строках заданы по два целых числа u и v (1 ≤ u, v ≤ n, u ≠ v) — вершины, связанные очередным ребром дерева.
Гарантируется, что входные данные задают корректное дерево.
В первой строке выведите одно целое число paths — количество путей, которые вы хотите выбрать.
В последующих paths строках выведите описания путей:
Система проверки сгенерирует массив res по выходным данным, предоставленным участником. Кроме того, система проверки сгенерирует массив resOptimal по ответу жюри. Ваше решение будет считаться корректным, если для каждого целого i (1 ≤ i ≤ n) .
3
1 2
2 3
2
1 1 1 2 0.6666666666
1 2 2 3 0.6666666666
Рассмотрим пример.
В начальный момент времени точки расположены следующим образом:
Красным выделен первый путь, синим — второй, зеленые круги обозначают выбранные точки, а коричневые числа внутри вершин — текущее значение секундомера. Фиолетовые стрелочки показывают направление, куда будет двигаться точка.
Через 0.(3) секунд точки будут расположены следующим образом (до обнуления секундомеров):
После обнуления секундомеров:
Через 1.0 секунду после начала движения:
Через 1.(3) секунд после начала движения (после обнуления секундомеров):
Наконец, через 2 секунды после начала движения точки вернутся на исходные позиции:
Такой процесс движения будет продолжаться бесконечно.
Название |
---|