Codeforces Round 146 (Div. 1) |
---|
Закончено |
В информатике есть метод под названием «Разделяй и властвуй по вершине», используемый для решения тяжелых задач про пути на дереве. Опишем принцип работы этого метода функцией:
solve(t) (t — дерево):
Этот процесс завершается, когда у t есть только одна вершина, потому что после ее удаления не остается ничего.
WJMZBMR ошибочно подумал, что можно выбрать любую вершину в «строке A». То есть, он выбирает вершину в «строке A» наугад. Ситуацию осложняет то, что по мнению юноши, у «дерева» должно быть одинаковое количество ребер и вершин! Таким образом, функция меняется следующим образом.
Определим переменную totalCost. Изначально значение totalCost равняется 0. Итак, solve(t) (теперь t — граф) выглядит так:
Юноша применит solve к связному графу с n вершинами и n ребрами. Он думает, что функция будет работать быстро, но она очень медленная. Теперь юноша хочет узнать матожидание значения totalCost после выполнения этой процедуры. Можете ли Вы помочь ему?
В первой строке записано целое число n (3 ≤ n ≤ 3000) — количество вершин и ребер в графе. Каждая из следующих n строк содержит два целых числа ai, bi (0 ≤ ai, bi ≤ n - 1), записанных через пробел — они указывают на то, что между вершинами ai и bi есть ребро.
Считайте, что вершины графа пронумерованы от 0 до (n - 1). Гарантируется, что граф не содержит петель и кратных ребер. Гарантируется, что граф связный.
Выведите единственное вещественное число — матожидание totalCost. Ваш ответ будет признан корректным, если его абсолютная или относительная погрешность не будет превышать 10 - 6.
5
3 4
2 3
2 4
0 4
1 2
13.166666666666666
3
0 1
1 2
0 2
6.000000000000000
5
0 1
1 2
2 0
3 0
4 1
13.166666666666666
Рассмотрим первый пример. Что бы мы ни выбрали в первую очередь, totalCost всегда будет равна 3 + 2 + 1 = 6.
Название |
---|