제출 #1318192

#제출 시각아이디문제언어결과실행 시간메모리
1318192vaishakhvToll (BOI17_toll)C++20
39 / 100
3093 ms14152 KiB
// Source: https://usaco.guide/general/io #include <bits/stdc++.h> using namespace std; using ll = long long; #define eb emplace_back // faster than push_back xD // pbds UwU #include <ext/pb_ds/assoc_container.hpp> using namespace __gnu_pbds; #define oset tree<ll, null_type,less<ll>, rb_tree_tag,tree_order_statistics_node_update> // use pair for ms // my io library :D #define m1(x) template<class T, class... U> void x(T&& a, U&&... b) #define m2(x) (ll[]){(x forward<U>(b),0)...} m1(pr){cout << forward<T>(a); m2(cout << " " <<); cout << "\n";} m1(re){cin >> forward<T>(a); m2(cin >>);} const ll cap = 5e4+1; ll dist[cap], k; vector<pair<ll,ll>> adj[cap]; vector<tuple<ll,ll,ll>> adj_by_layer[cap]; void dijkstra(ll s){ priority_queue<pair<ll,ll>> pq; fill(dist, dist+cap, 1e18); pq.push({0, s}); dist[s] = 0; while (!pq.empty()){ pair<ll,ll> oknext = pq.top(); pq.pop(); oknext.first *= -1; for (auto u: adj[oknext.second]){ if (dist[oknext.second] + u.second < dist[u.first]){ dist[u.first] = dist[oknext.second] + u.second; pq.push({-dist[u.first], u.first}); } } } } ll layer(ll a){ return a/k; } int main() { ios::sync_with_stdio(0); cin.tie(0); ll n, m, o; re(k, n, m, o); for (ll i{}; i < m; i++){ ll a, b, t; re(a, b, t); adj[a].eb(make_pair(b, t)); adj_by_layer[layer(a)].eb(make_tuple(a,b,t)); } for (ll i{}; i < o; i++){ ll a, b; re(a, b); ll la = layer(a), lb = layer(b); vector<ll> dp(k, 1e18); dp[a%k] = 0; for (ll j = la; j < lb; j++){ vector<ll> dp_next(k, 1e18); // cheapest cost to be at pos j in current layer? update: IT WORKS IG!! for (auto tup: adj_by_layer[j]){ ll a, b, t; tie(a,b,t) = tup; ll apos = a % k, bpos = b % k; dp_next[bpos] = min(dp_next[bpos], dp[apos]+t); } dp = dp_next; } ll ans = dp[b%k]; if (ans == 1e18) ans = -1; pr(ans); } }
#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...