728x90
https://www.acmicpc.net/problem/31002
문제에 주어진 변환을 직접 손으로 해보자. 그러면 다음 사실을 발견할 수 있다.
차수를 $deg$이라고 할 때, 첫 변환에서 정점이 될 간선에서 연결된 기존 $G$의 정점으로 하여금 각각 연결된 간선이 $deg - 1$개만큼 존재하여 총 $2(deg - 1)$ 만큼의 간선이 새로 생기고 역시 새로운 차수가 된다.
이때 총 간선의 개수는 악수 정리에 의해 $\frac {VE}{2}$가 된다.
간선이 어떻게 증가하는지 파악했으니 위 계산을 $K$번 반복해주면 답을 구할 수 있다.
정답 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
#pragma GCC target("avx,avx2,fma,bmi,bmi2,lzcnt,popcnt")
#pragma GCC optimize("O3,unroll-loops")
#include "bits/stdc++.h"
#include "ext/pb_ds/assoc_container.hpp"
using namespace std;
using namespace __gnu_pbds;
using pii = pair<int, int>;
using ll = int_fast64_t;
int n, k;
constexpr ll mod = 1e9+7;
constexpr ll modinv = 500000004;
void solve()
{
cin >> n >> k;
ll nodes = n;
ll degree = n - 1;
ll edges = n * (n - 1) % mod * modinv % mod;
for (int i = 0; i < k; i++)
{
ll next_nodes = edges;
degree = (degree - 1) * 2 % mod;
edges = degree * next_nodes % mod * modinv % mod;
nodes = next_nodes;
}
cout << nodes;
}
int main()
{
#ifdef LOCAL
// freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
}
|
cs |
728x90
'백준 > 수학' 카테고리의 다른 글
백준 2378 - 불필요한 수 (0) | 2025.01.29 |
---|---|
백준 12994 - 이동 3-2 (0) | 2025.01.22 |
[ICPC] 백준 28152 - Power of Divisors (0) | 2024.11.27 |
백준 27437 - 분수찾기 2 (1) | 2024.11.13 |
백준 18287 - 체스판 이동 (0) | 2022.08.27 |