比赛 20251001国庆欢乐赛1 评测结果 AAAAAATTTT
题目名称 信使 最终得分 60
用户昵称 淮淮清子 运行时间 27.022 s
代码语言 C++ 内存使用 3.74 MiB
提交时间 2025-10-01 11:22:14
显示代码纯文本
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;

const int MAXN = 105;
const int MAXD = 55;

vector<int> G[MAXN]; 
int dp[MAXD][MAXN];  
int ans[MAXN][MAXN][MAXD]; 
int n, m, z, q;

int main(){
    freopen("messenger.in","r", stdin);
    freopen("messenger.out", "w", stdout);
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> m >> z;
    for(int i = 0;i < m;i ++){
        int a, b; cin >> a >> b;
        G[a].push_back(b);
    }
    for(int u = 1;u <= n;u ++){
        for(int v = 1;v <= n;v ++){
            if(u == v) continue;
            for(int d = 1;d <= 50;d ++){
                memset(dp, 0, sizeof(dp));
                dp[0][u] = 1;
                for(int k = 0;k < d;k ++){
                    for(int x = 1;x <= n;x ++){
                        if(dp[k][x] == 0) continue;
                        for(int y : G[x]){
                            if(k < d - 1 && (y == u || y == v)) continue;
                            dp[k + 1][y] = (dp[k + 1][y] + dp[k][x]) % z;
                        }
                    }
                }
                ans[u][v][d] = dp[d][v] % z;
            }
        }
    }
    cin >> q;
    while(q --){
        int u, v, d;
        cin >> u >> v >> d;
        cout << ans[u][v][d] << '\n';
    }
    return 0;
}