动态规划,建一个vector vec[i]用来储存i为起点,接下来一天内能走到的其他点,接下来累加就可以
// Problem#: 1211
// Submission#: 3257911
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
int road[101][101][101] = {};
int main() {
int n, m, L;
int q, A, B;
int i, j, k, l;
vector<int> v[101];
scanf("%d%d%d", &n, &m, &L);
while (m--) {
scanf("%d%d", &i, &j);
road[i][j][1] = 1;
v[i].push_back(j);
}
for (l = 2; l <= L; l++) {
for (i = 1; i <= n; i++) {
for (j = 1; j <= n; j++) {
if (road[i][j][l - 1] != 0) {
for (k = 0; k < v[j].size(); k++) {
road[i][v[j][k]][l] += road[i][j][l - 1];
}
}
}
}
}
scanf("%d", &q);
while (q--) {
scanf("%d%d", &A, &B);
printf("%d\n", road[A][B][L]);
}
}