Submission #696618

#TimeUsernameProblemLanguageResultExecution timeMemory
696618uyluluAutobus (COCI22_autobus)C++17
70 / 70
138 ms4184 KiB
#include<bits/stdc++.h>
using namespace std;

#define int long long
#define endl "\n"

const int N = 70;

int dis[N + 1][N + 1],res[N + 1][N + 1][N + 1];

signed main() {
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

    // freopen("in.txt","r",stdin);
    // freopen("out.txt","w",stdout);

    int n,m;
    cin>>n>>m;

    for(int i = 1;i <= n;i++) {
        for(int j = 1;j <= n;j++) {
            if(i == j) continue;

            dis[i][j] = INT_MAX; 
        }
    }

    for(int i = 0;i < m;i++) {
        int a,b,t;
        cin>>a>>b>>t;

        dis[a][b] = min(dis[a][b],t);
    }
    for(int i = 0;i <= n;i++) {
        for(int j =0;j <= n;j++) {
            for(int t = 0;t <= n;t++) {
                res[i][j][t] = INT_MAX;                
            }
        }
    }

    for(int i = 1;i <= n;i++) {
        res[0][i][i] = 0;
    }
    for(int stage = 0;stage < n;stage++) {
        for(int root = 1;root <= n;root++) {

            for(int node = 1;node <= n;node++) {

                for(int fin = 1;fin <= n;fin++) {
                    res[stage + 1][root][fin] = min(res[stage + 1][root][fin],res[stage][root][node] + dis[node][fin]);
                }
            }
        }
    }
    int k,q;
    cin>>k>>q;

    k = min(k,n);

    while(q--) {
        int u,v;
        cin>>u>>v;

        int kq = INT_MAX;
        for(int i = 0;i <= k;i++) {
            kq = min(kq,res[i][u][v]);
        }
        if(kq == INT_MAX) {
            cout<<-1<<endl;
        } else {
            cout<<kq<<endl;
        }
    }
}           
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...