记录编号 |
584889 |
评测结果 |
AAAAAAAAAA |
题目名称 |
信使 |
最终得分 |
100 |
用户昵称 |
小金 |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
9.117 s |
提交时间 |
2023-11-16 19:33:42 |
内存使用 |
21.01 MiB |
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
long long z,f[110][110][55],h[110][110][55],g[110][110][55];
int n,m,q,a[110][110]={};
void qf()
{
for(int l=2;l<=50;l++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)
{
if(a[k][j]==1)
{
f[i][j][l]=(f[i][j][l]+f[i][k][l-1])%z;
}
}
}
}
}
}
void qhg()
{
for(int l=2;l<=50;l++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(i!=j)
{
long long h1=0,g1=0;
for(int k=1;k<l;k++)
{
h1=(h1+g[i][j][k]*f[i][j][l-k])%z;
h1=(h1+h[i][j][k]*f[j][j][l-k])%z;
g1=(g1+g[i][j][k]*f[i][i][l-k])%z;
g1=(g1+h[i][j][k]*f[j][i][l-k])%z;
}
h[i][j][l]=(f[i][j][l]-h1+z)%z;
g[i][j][l]=(f[i][i][l]-g1+z)%z;
}
}
}
}
}
int main()
{
freopen("messenger.in","r",stdin);
freopen("messenger.out","w",stdout);
memset(f,0,sizeof(f));
memset(h,0,sizeof(h));
memset(g,0,sizeof(g));
cin>>n>>m>>z;
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
a[u][v]=1;
f[u][v][1]=1;
h[u][v][1]=1;
}
qf();
qhg();
cin>>q;
for(int i=1;i<=q;i++)
{
int u,v,d;
cin>>u>>v>>d;
cout<<h[u][v][d]<<endl;
}
return 0;
}