Submission #170984

#TimeUsernameProblemLanguageResultExecution timeMemory
170984RodsToll (BOI17_toll)C++14
0 / 100
3020 ms12892 KiB
#include <bits/stdc++.h> #define endl '\n' #define all(x) x.begin(),x.end() #define sz(x) ((int)x.size()) #define x first #define y second #define pb push_back #define ppb pop_back #define pf push_front #define ppf pop_front #define ll long long #define int ll #define ld long double #define ii pair<int, int> #define iii pair<int, ii> #define vi vector<int> #define vii vector<ii> using namespace std; const int ms = 5e4+100; const int inf = 1e15; const int sigma = 8; const int mlg = 23; int n, m, k, t, q; vii g[ms]; int dis[ms][sigma]; int adj[ms]; priority_queue<ii, vector<ii>, greater<ii>> pq; void dijkstra(int x, int p) { dis[x][p] = 0; pq.push(ii(0, x)); while(!pq.empty()) { ii x = pq.top(); pq.pop(); int u = x.second; if(x.first > dis[u][p]) continue; for(auto e : g[u]) { int v = e.first, w = e.second; if(dis[u][p]+w < dis[v][p]) { dis[v][p] = dis[u][p] + w; pq.push(ii(dis[v][p], v)); } } } } void is_conected(int a, int b, set<int> &vis){ if(a/k > b/k) return; vis.insert(a); for(auto x: g[a]){ if(vis.count(x.x)==0) is_conected(x.x, b, vis); } } void solve(){ for(int i=0; i<ms; i++){ for(int j=0; j<sigma; j++) dis[i][j] = inf; } cin>>k>>n>>m>>q; int a, b, c; for(int i=0; i<m; i++){ cin>>a>>b>>c; adj[b]++; g[a].pb({b, c}); } for(int i=0; i<n; i++){ if(adj[i]==0){ // g[n+i%k].pb({i, 0}); } } for(int i=0; i<n; i++){ if(dis[i][0]==inf){ dijkstra(i, 0); } } while(q--){ cin>>a>>b; set<int> aux; is_conected(a, b, aux); if(aux.count(b)){ cout<<dis[b][0] - dis[a][0]<<endl; }else{ cout<<-1<<endl; } } } int32_t main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); solve(); }
#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...