我们称简单有向图 � , � G,H 本质相同,当且仅当: 对于任意点对 ( � , � ) (u,v),若在图 � G 中从 � u 出发能走到 � v,则在图 � H 中从 � u 出发能走到 � v。反之若在图 � H 中从 � u 出发能走到 � v,则在图 � G 中从 � u 出发也能走到 � v。 若对于简单有向图 � G,不存在其他简单有向图 � H 与其本质相同,则我们称图 � G 为 单图。 � T 次询问,每次询问给定一个正整数 � n,请你回答 � n 个点的有标号单图数。 c++代码实现
时间: 2024-02-13 14:06:59 浏览: 98
以下是用 C++ 实现的代码,使用了高精度整数库 GMP:
```c++
#include <bits/stdc++.h>
#include <gmpxx.h>
using namespace std;
const int MAXN = 2005;
int n, t;
mpz_class f[MAXN];
int main() {
cin >> t;
f[0] = 1;
for (int i = 1; i <= 2000; ++i) {
mpz_class prod = 1;
for (int j = 1; j <= i - 2; ++j)
prod *= j;
f[i] = i * i * prod;
}
while (t--) {
cin >> n;
cout << f[n] << endl;
}
return 0;
}
```
其中 `f[i]` 表示 $i$ 个点的有标号单图数,根据前面的推导可以得到 `f[i] = i * i * (i-2)!`。由于 $n$ 的范围较大,需要使用高精度整数库 GMP 来存储和计算。
阅读全文