比赛 2024暑期C班集训4 评测结果 ATTTTTTTTT
题目名称 勇者 最终得分 10
用户昵称 AeeE5x 运行时间 27.000 s
代码语言 C++ 内存使用 5.49 MiB
提交时间 2024-07-04 09:49:46
显示代码纯文本
#include<iostream>
#include<cstring>
#include<vector>
#include<cmath>
#include<queue> 
#define ll long long
using namespace std;
const int MOD=1e9+7;
int n,m,ans;
int map[310][310];
bool ed[310];
bool f2(){
	memset(ed,0,sizeof ed);
	queue<int> que;
	que.push(1);
	ed[1]=1;
	while(!que.empty()){
		for(int i=1;i<=n;i++){
			if(!map[que.front()][i]||ed[i]) continue;
			ed[i]=1;
			que.push(i);
		}
		que.pop();
	}
	for(int i=1;i<=n;i++) if(!ed[i]) return false;
	return true;
}
bool f3(){
	memset(ed,0,sizeof ed);
	queue<int> que;
	que.push(1);
	ed[1]=1;
	while(!que.empty()){
		for(int i=1;i<=n;i++){
			if(!map[i][que.front()]||ed[i]) continue;
			ed[i]=1;
			que.push(i);
		}
		que.pop();
	}
	for(int i=1;i<=n;i++) if(!ed[i]) return false;
	return true;
}
void f1(int x,int p){
	if(p==m+1){
		if(f2()&&f3()) ans=(ans+1)%MOD;
		return;
	}
	for(int i=1;i<=n;i++){
		if(x==i) continue;
		map[x][i]++;
		f1(i,p+1);
		map[x][i]--;
	}
}
int main(){
    freopen("rotk.in","r",stdin);
    freopen("rotk.out","w",stdout);
    
    scanf("%d%d",&n,&m);
    f1(1,1);
    printf("%d",ans);
    
    return 0;
}