| 比赛 |
2025.12.13 |
评测结果 |
AAAAAAAAAA |
| 题目名称 |
勇者 |
最终得分 |
100 |
| 用户昵称 |
淮淮清子 |
运行时间 |
0.684 s |
| 代码语言 |
C++ |
内存使用 |
53.42 MiB |
| 提交时间 |
2025-12-13 11:09:07 |
显示代码纯文本
#include<iostream>
using namespace std;
#define int long long
const int MAXN = 305;
const int MOD = 1e9 + 7;
//f[i][j][k] 走了 i 步,访问了 j 个点,以 1 为根的 scc 大小为 k
int f[MAXN][MAXN][MAXN];
int n, m;
signed main(){
freopen("rotk.in", "r", stdin);
freopen("rotk.out", "w", stdout);
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
f[0][1][1] = 1;
for(int i = 0;i <= m - 1;i ++){
for(int j = 1;j <= n;j ++){
for(int k = 1;k <= n;k ++){
if(!f[i][j][k]) continue;
//没走的
f[i + 1][j + 1][k] += f[i][j][k] * (n - j) % MOD;
f[i + 1][j + 1][k] %= MOD;
//走过,但不在 1 的scc
f[i + 1][j][k] += f[i][j][k] * (j - k) % MOD;
f[i + 1][j][k] %= MOD;
//走过,在 1 的 scc
f[i + 1][j][j] += f[i][j][k] * k % MOD;
f[i + 1][j][j] %= MOD;
}
}
}
cout << f[m][n][n] % MOD << '\n';
return 0;
}