11289. Размеченные
графы
Пусть количество вершин в графе
равно n. Подсчитайте количество размеченных графов с n вершинами
(размеченный означает, что вершины помечены числами от 1 до n). Ребра
графов считаются неориентированными, а петли и кратные ребра запрещены.
Вход. Количество вершин n (1 ≤
n ≤ 105) в графе.
Выход. Выведите количество размеченных
графов с n вершинами. Выведите ответ по модулю 109 + 7.
Пример
входа 1 |
Пример
выхода 1 |
2 |
2 |
|
|
Пример
входа 2 |
Пример
выхода 2 |
3 |
8 |
графы
В графе из n вершин можно провести p = n * (n – 1) / 2 ребер. Выбрав произвольное подмножество ребер, можно
получить размеченный граф. Количество размеченных графов равно числу подмножеств всего множества
возможных ребер, а именно 2p.
Пример
Для n = 2 имеются 2 графа. В первом графе
ребра отсутствуют. Во втором графе присутствует единственное ребро.
Для n = 3 имеются 8 графов:
Реализация алгоритма
Функция PowMod вычисляет xn mod m.
long long PowMod(long long x, long long n, long long m)
{
if (n == 0) return 1;
if (n % 2 == 0) return PowMod((x * x) % m, n / 2, m);
return (x * PowMod(x, n - 1, m)) % m;
}
Основная
часть программы. Читаем входное значение n.
scanf("%lld", &n);
Вычисляем
и выводим ответ res = mod (109 + 7).
p = n * (n
- 1) / 2;
res =
PowMod(2, p, MOD);
printf("%lld\n", res);