递推
先建图,后递推,和B题类似。
#include<stdio.h>
#include<string.h>
int map[25][25];
int f[25][25];
void solve(int num,int n)
{
int i,j,k,temp;
for(i=2;i<=num;i++)
{
for(j=0;j<n;j++)
{
temp=0;
for(k=0;k<n;k++)
if(map[k][j])
temp=(temp%1000+f[i-1][k]%1000)%1000;
f[i][j]=temp;
}
}
}
int main()
{
int i,j,n,m,s,t,T,A,B,K;
while(scanf("%d%d",&n,&m))
{
if(m+n==0)
break;
memset(map,0,sizeof(map));
for(i=0;i<m;i++)
{
scanf("%d%d",&s,&t);
map[s][t]=1;
}
scanf("%d",&T);
for(i=0;i<T;i++)
{
scanf("%d%d%d",&A,&B,&K);
if(K==0)
{
if(A==B)
printf("1\n");
else
printf("0\n");
continue;
}
memset(f,0,sizeof(f));
for(j=0;j<n;j++)
{
if(map[A][j])
f[1][j]=1;
}
solve(K,n);
printf("%d\n",f[K][B]);
}
}
}