【题目链接】
【思路要点】
- 显然,问题是求不同的树的形态乘以\((N-1)!\)。
- 由Prufer序列,显然不同的树的形态有\(N^{N-2}\)种,故答案为\((N-1)!*N^{N-2}\)。
- 时间复杂度\(O(N)\)。
【代码】
#include<bits/stdc++.h> using namespace std; #define MAXN 5005 #define P 9999991 template <typename T> void read(T &x) { x = 0; int f = 1; char c = getchar(); for (; !isdigit(c); c = getchar()) if (c == '-') f = -f; for (; isdigit(c); c = getchar()) x = x * 10 + c - '0'; x *= f; } long long power(int x, int y) { if (y == 0) return 1; long long tmp = power(x, y / 2); if (y % 2 == 0) return tmp * tmp % P; else return tmp * tmp % P * x % P; } int main() { int n; read(n); long long ans = power(n, n - 2); for (int i = 1; i <= n - 1; i++) ans = ans * i % P; cout << ans << endl; return 0; }