记录编号 610123 评测结果 AAAAAAAAAA
题目名称 勇者 最终得分 100
用户昵称 Gravatar淮淮清子 是否通过 通过
代码语言 C++ 运行时间 0.796 s
提交时间 2025-12-13 17:14:19 内存使用 53.44 MiB
显示代码纯文本
#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;
}