比赛 |
20251001国庆欢乐赛1 |
评测结果 |
AAAAAAEEEE |
题目名称 |
信使 |
最终得分 |
60 |
用户昵称 |
左清源 |
运行时间 |
1.475 s |
代码语言 |
C++ |
内存使用 |
3.89 MiB |
提交时间 |
2025-10-01 11:41:49 |
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int N=35,M=5e5+10,V=50;
struct node{int y,k,id;};
vector<node>vec[N];
vector<int>G[N];
int f[N][N][55],n,m,mod,q,ans[M];
int main(){
freopen("messenger.in","r",stdin);
freopen("messenger.out","w",stdout);
scanf("%d %d %d",&n,&m,&mod);
for(int i=1;i<=m;i++){
int u,v;scanf("%d %d",&u,&v);
G[v].push_back(u);
}
scanf("%d",&q);
for(int i=1;i<=q;i++){
int x,y,k;
scanf("%d %d %d",&x,&y,&k);
vec[x].push_back(node{y,k,i});
}
for(int s=1;s<=n;s++){
for(int j=1;j<=n;j++){
f[s][j][0]=1;
//cout<<s<<"-"<<j<<" "<<0<<" "<<f[s][j][0]<<endl;
}
for(int k=1;k<=V;k++){
for(int i=1;i<=n;i++){
if(s==i)continue;
for(int j=1;j<=n;j++){
for(auto pre:G[i]){
if(j==pre)continue;
f[i][j][k]+=f[pre][j][k-1];
f[i][j][k]%=mod;
// if(s==5&&i==3&&j==3&&k==6){
// cout<<pre<<" "<<j<<" "<<k-1<<" "<<f[pre][j][k-1]<<endl;
// }
// if(s==5&&i==2&&j==3&&k==5){
// cout<<pre<<" "<<j<<" "<<k-1<<" "<<f[pre][j][k-1]<<endl;
// }
// if(s==5&&i==1&&j==3&&k==4){
// cout<<pre<<" "<<j<<" "<<k-1<<" "<<f[pre][j][k-1]<<endl;
// }
// if(s==5&&i==4&&j==3&&k==3){
// cout<<pre<<" "<<j<<" "<<k-1<<" "<<f[pre][j][k-1]<<endl;
// }
// if(s==5&&i==2&&j==3&&k==2){
// cout<<pre<<" "<<j<<" "<<k-1<<" "<<f[pre][j][k-1]<<endl;
// }
// if(s==5&&i==1&&j==3&&k==1){
// cout<<pre<<" "<<j<<" "<<k-1<<" "<<f[pre][j][k-1]<<endl;
// }
}
//cout<<i<<" "<<j<<" "<<k<<" "<<f[i][j][k]<<endl;
}
}
}
for(auto sta:vec[s]){
int id=sta.id,y=sta.y,k=sta.k;
ans[id]=f[y][y][k];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
for(int k=0;k<=V;k++){
f[i][j][k]=0;
}
}
}
}
for(int i=1;i<=q;i++){
printf("%d\n",ans[i]);
}
return 0;
}
/*
5 7 10
1 2
2 3
3 4
4 5
5 1
2 4
4 1
2
2 1 3
5 3 6
*/