10843. Игра Ани
Аня любит играть в следующую
игру. Она рисует круг на бумаге. Потом рисует следующий круг и соединяет его
отрезком с предыдущим. Затем рисует следующий круг и соединяет его с одним из
предыдущих кругов. И так далее пока на бумаге не окажется n кругов. Аня
нумерует круги числами от 1 до n в произвольном порядке. Сколько разных
рисунков может получить Аня? Рисунки считаются разными, если существуют такие
два круга i и j, что в одном рисунке они соединены, а в другом –
нет.
Вход.
Первая строка содержит количество тестов N. Далее следуют N строк, каждая из
которых содержит количество кругов n (0 < n £ 100).
Выход. Для каждого теста вывести его
номер и число X, где X – остаток от деления количества разных рисунков на
2000000011.
3
1
2
3
Case #1: 1
Case #2: 1
Case #3: 3
графы, количество остовных деревьев
В задаче требуется найти
количество разных пронумерованных деревьев с n вершинами. Или то же
самое что количество остовных деревьев в полном графе из n вершин (граф
называется полным, если его две любые вершины соединены ребром).
Теорема. Существует взаимно однозначное
соответствие между остовными деревьями для полного графа из n вершин и
кодами Прюфера длины n – 2.
Лемма. Количество кодов Прюфера длины n
– 2 равно nn-2.
Значит количество рисунков,
которое может изобразить Аня (число пронумерованных деревьев с n
вершинами), равно nn-2.
Для n = 4 имеем 16
деревьев. Под каждым деревом приведен его код Прюфера
(1, 1) (1, 2) (1, 3) (1, 4)
(2, 1) (2, 2) (2, 3) (2, 4)
(3, 1) (3, 2) (3, 3) (3, 4)
(4, 1) (4, 2) (4, 3) (4, 4)
Читаем количество тестов tests.
Для каждого теста читаем значение n, вычисляем и выводим результат nn-2 (mod
2000000011) .
long long
res;
scanf("%d",&tests);
for(t = 1; t <= tests; t++)
{
scanf("%d",&n);
res = 1;
for(i = 0; i
< n - 2; i++)
res = (res * n) % 2000000011;
printf("Case
#%d: %lld\n",t,res);
}