裸的矩阵。
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
#define mod 1000
int n,m;
struct matrix
{
int a[21][21];
};
matrix operator * (matrix x,matrix y)
{
matrix c;
memset(c.a,0,sizeof(c.a));
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
for(int k=0;k<n;k++)
{
c.a[i][j]+=x.a[i][k]*y.a[k][j];
c.a[i][j]=c.a[i][j]%mod;
}
}
}
return c;
}
matrix solve (matrix A,int k)
{
matrix res;
memset(res.a,0,sizeof(res.a));
for(int i=0;i<n;i++)
{
res.a[i][i]=1;
}
while(k)
{
if(k&1)
res=res*A;
k=k>>1;
A=A*A;
}
return res;
}
int main()
{
int x,y,z,q;
while(scanf("%d%d",&n,&m)&&(n+m))
{
matrix org;
memset(org.a,0,sizeof(org.a));
for(int i=1;i<=m;i++)
{
scanf("%d%d",&x,&y);
org.a[x][y]=1;
}
scanf("%d",&q);
while(q--)
{
scanf("%d%d%d",&x,&y,&z);
matrix res = solve(org,z);
printf("%d\n",res.a[x][y]);
}
}
return 0;
}