// 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 time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |