记录编号 606655 评测结果 AAAAAAAAAA
题目名称 3946.信使 最终得分 100
用户昵称 Gravatar123 是否通过 通过
代码语言 C++ 运行时间 9.238 s
提交时间 2025-10-01 16:42:26 内存使用 10.69 MiB
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
const int M=55,N=110; 
int n,m,x,y,q,mod;
long long f[M][N][N],g[M][N][N],h[M][N][N];
int main() {
    freopen("messenger.in","r",stdin);
    freopen("messenger.out","w",stdout);
    cin>>n>>m>>mod;
    while (m--) scanf("%d%d",&x,&y),f[1][x][y]=1;
    for (int l=2;l<=50;l++)
	{
		for (int k=1;k<=n;k++)
		{
			for (int i=1;i<=n;i++)
			{
				for (int j=1;j<=n;j++)
				{
					f[l][i][j]=(f[l][i][j]+f[l-1][i][k]*f[1][k][j]%mod)%mod;
				}
			}
		}
	}
	for (int i=1;i<=n;i++)
	{
		for (int j=1;j<=n;j++)
		{
			h[1][i][j]=f[1][i][j];
		}
	}
	for (int l=2;l<=50;l++)
	{
		for (int i=1;i<=n;i++)
		{
			for (int j=1;j<=n;j++)
			{
				if (i==j) continue; 
				for (int k=1;k<l;k++)
				{
					h[l][i][j]=(h[l][i][j]+g[k][i][j]*f[l-k][i][j]%mod+h[k][i][j]*f[l-k][j][j]%mod)%mod;
					g[l][i][j]=(g[l][i][j]+g[k][i][j]*f[l-k][i][i]%mod+h[k][i][j]*f[l-k][j][i]%mod)%mod;
				}
				h[l][i][j]=(f[l][i][j]-h[l][i][j]+mod)%mod;
				g[l][i][j]=(f[l][i][i]-g[l][i][j]+mod)%mod;
			}
		}
	}
	cin>>q;
	while (q--)
	{
		int u,v,d;
		scanf("%d%d%d",&u,&v,&d);
		printf("%lld\n",h[d][u][v]);
	}
}