比赛 |
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;
}