Submission #1262037

#TimeUsernameProblemLanguageResultExecution timeMemory
1262037nlsosadToll (BOI17_toll)C++20
100 / 100
143 ms37604 KiB
#include <bits/stdc++.h> #define int long long using namespace std; vector<pair<int, int>> a[50001]; int bin[50001][16][5]; int inf = 1e18; int n, k, m, q; vector<bool> vst(50001, false); void dfs(int i){ stack<int> st; st.push(i); while(!st.empty()){ int u = st.top(); st.pop(); vst[u] = true; for (auto [v, w]:a[u]){ if(!vst[v]){ st.push(v); } bin[u][0][v%k] = w; } } } int query(int u, int v){ if(u/k >= v/k or !vst[u] or !vst[v])return -1; int dif = v/k - u/k; vector<int> sol(k, 0); bool check = false; int lev = u/k; for (int bit = 15;bit>=0;--bit){ if(dif & (1<<bit)){ if(!check){ for (int p = 0;p<k;++p){ sol[p] = bin[u][bit][p]; } check = true; }else{ vector<int> tmp(k, inf); for (int p = 0;p<k;++p){ for (int q = 0;q<k;++q){ tmp[p] = min(tmp[p], sol[q] + bin[lev*k + q][bit][p]); } } for (int p = 0;p<k;++p){ sol[p] = tmp[p]; } } // cout << '\n'; lev += (1<<bit); } } return sol[v%k]; } signed main(){ cin >> k >> n >> m >> q; for (int i = 1;i<=m;++i){ int u, v, w; cin >> u >> v >> w; a[u].push_back({v, w}); } for (int i = 0;i<n;++i){ vst[i] = false; for (int j = 0;j<16;++j){ for (int p = 0;p<k;++p){ bin[i][j][p] = inf; } } } for (int i = 0;i<n;++i){ if(!vst[i] and !a[i].empty())dfs(i); } for(int j = 1;j<16;++j){ for (int i = 0;i<n;++i){ if(!vst[i])continue; for (int p = 0;p<k;++p){ bin[i][j][p] = inf; int lev = i/k; for (int q = 0;q<k;++q){ if((lev + (1<<(j-1)))*k+q>=n)continue; bin[i][j][p] = min(bin[i][j][p], bin[i][j-1][q] + bin[ (lev + (1<<(j-1)))*k+q][j-1][p]); } } } } while(q--){ int u, v; cin >> u >> v; int t = query(u, v); if(t==inf)t = -1; cout << t << '\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...