Submission #1145757

#TimeUsernameProblemLanguageResultExecution timeMemory
1145757nrg_studioToll (BOI17_toll)C++20
100 / 100
173 ms78716 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pb push_back
#define pii pair<int,int>
#define f first
#define s second
#define chmin(a, b) a = min(a,b)
#define chmax(a, b) a = max(a,b)
#define FOR(i, a, b) for (int i = (a); i < (b); i++)
#define F0R(i, a) for (int i = 0; i < (a); i++)
#define all(x) x.begin(),x.end()
#define v vector

const int MAX_N = 50000, l2d = 16, MAX_K = 5;
int dist[MAX_N][MAX_K][l2d][MAX_K];
int INF = 1e9;

int main() {
    ios::sync_with_stdio(false); cin.tie(0);

    int n, m, k, o; cin >> k >> n >> m >> o;

    F0R(i,n) F0R(j,k) F0R(l,l2d) F0R(z,k) {dist[i][j][l][z] = INF;}
    F0R(i,m) {
        int a, b, t; cin >> a >> b >> t;
        dist[a/k][a%k][0][b%k] = t;
    }
    for(int p=1,p2=2;p<l2d;p++,p2*=2) {
        F0R(i,n-p2) {
            F0R(start,k) F0R(mid,k) F0R(stop,k) {
                chmin(dist[i][start][p][stop],
                    dist[i][start][p-1][mid]+dist[i+p2/2][mid][p-1][stop]);
            }
        }
    }
    //cout << dist[4][0][0][0] << 'e'<<'\n';
    
    while (o--) {
        int a, b; cin >> a >> b;
        int d = b/k-a/k;

        v<int> ans(k,INF);

        ans[a%k] = 0;
        a /= k;

        for (int b=0,p=1;b<l2d;b++,p*=2) {
            if (d&(1<<b)) {
                v<int> nxt(k,INF);
                F0R(i,k) {
                    F0R(j,k) {
                        chmin(nxt[j],ans[i]+dist[a][i][b][j]);
                    }
                }
                ans = nxt;
                a += p;
            }
        }
        
        cout << (ans[b%k]==INF ? -1 : ans[b%k]) << '\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...