记录编号 584889 评测结果 AAAAAAAAAA
题目名称 信使 最终得分 100
用户昵称 Gravatar小金 是否通过 通过
代码语言 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;
}