我们称简单有向图 � , � G,H 本质相同,当且仅当: 对于任意点对 ( � , � ) (u,v),若在图 � G 中从 � u 出发能走到 � v,则在图 � H 中从 � u 出发能走到 � v。反之若在图 � H 中从 � u 出发能走到 � v,则在图 � G 中从 � u 出发也能走到 � v。 若对于简单有向图 � G,不存在其他简单有向图 � H 与其本质相同,则我们称图 � G 为 单图。 � T 次询问,每次询问给定一个正整数 � n,请你回答 � n 个点的有标号单图数。 输入格式 本题采用多组输入。 第一行输入两个整数 � , � � � T,mod,表示数据组数与模数。 接下来 � T 行每行一个整数,表示这组数据的 � n。 输出格式 输出 � T 行,第 � i 行表示第 � i 组数据的答案对 � � � mod 取模的值。 c++代码
时间: 2024-02-13 22:07:02 浏览: 56
已知有向图和图中两个顶点u和v,试编写算法求有向图中从u到v的所有简单路径。
5星 · 资源好评率100%
以下是用 C++ 实现的代码,使用了高精度整数库 GMP:
```c++
#include <bits/stdc++.h>
#include <gmpxx.h>
using namespace std;
const int MAXN = 2005;
const int MAXT = 105;
int t, mod;
mpz_class f[MAXN];
int main() {
cin >> t >> mod;
f[0] = 1;
for (int i = 1; i <= 2000; ++i) {
mpz_class prod = 1;
for (int j = 1; j <= i - 2; ++j)
prod *= j % mod;
f[i] = i * i * prod % mod;
}
while (t--) {
int n;
cin >> n;
cout << f[n] << endl;
}
return 0;
}
```
其中 `f[i]` 表示 $i$ 个点的有标号单图数,根据前面的推导可以得到 `f[i] = i * i * (i-2)!`。由于需要对答案取模,因此需要在计算过程中加上取模操作。
阅读全文