Submission #1157494

#TimeUsernameProblemLanguageResultExecution timeMemory
1157494antonnEscape Route (JOI21_escape_route)C++20
Compilation error
0 ms0 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 90 + 7; const ll inf = 1e18; int n; vector<array<ll, 3>> g[N]; ll zero_delay[N][N], dist[N][N], d[N]; bool vis[N]; vector<array<ll, 3>> intervals[N][N]; ll get_dist(int src, int dest, ll t) { for (int j = 0; j < N; ++j) { d[j] = inf; vis[j] = 0; } d[src] = 0; priority_queue<pair<int, int>> pq; pq.push({0, src}); while (!pq.empty()) { int u = pq.top().second; pq.pop(); if (vis[u] == 1) continue; vis[u] = 1; for (auto [v, l, c] : g[u]) { if (t + d[u] + l <= c && d[u] + l < d[v]) { d[v] = d[u] + l; pq.push({-d[v], v}); } } } return d[dest]; } vector<ll> calculate_necessary_time(int N, int M, ll S, int Q, vector<int> A, vector<int> B, vector<ll> L, vector<ll> C, vector<int> U, vector<int> V, vector<ll> T) { for (int i = 0; i < M; ++i) { g[A[i]].push_back({B[i], L[i], C[i]}); g[B[i]].push_back({A[i], L[i], C[i]}); } for (int u = 0; u < N; ++u) { for (int v = 0; v < N; ++v) { zero_delay[u][v] = inf; } vector<bool> vis(N); priority_queue<pair<ll, int>> pq; pq.push({0, u}); zero_delay[u][u] = 0; while (!pq.empty()) { int x = pq.top().second; pq.pop(); if (vis[x]) continue; vis[x] = 1; for (auto [v, l, c] : g[x]) { if (zero_delay[u][x] + l <= c && zero_delay[u][x] + l <= zero_delay[u][v]) { zero_delay[u][v] = zero_delay[u][x] + l; pq.push({-zero_delay[u][v], v}); } } } } for (int u = 0; u < N; ++u) { for (int v = 0; v < N; ++v) { dist[u][v] = zero_delay[u][v]; } } for (int step = 0; step < 100; ++step) { for (int w = 0; w < N; ++w) { for (int u = 0; u < N; ++u) { for (int v = 0; v < N; ++v) { dist[u][v] = min(dist[u][v], dist[u][w] + S - dist[u][w] % S + dist[w][v]); } } } } int sum = 0; for (int u = 0; u < N; ++u) { for (int v = 0; v < N; ++v) { ll l = 0; while (l <= S) { ll d = get_dist(u, v, l); if (d == inf) break; ll low = l, high = S, sol = 0; while (low <= high) { int mid = (low + high) / 2; if (get_dist(u, v, mid) == d) { sol = mid; low = mid + 1; } else { high = mid - 1; } } intervals[u][v].push_back({l, sol, d}); l = sol + 1; } sum += intervals[u][v].size(); } } vector<ll> sol(Q); for (int i = 0; i < Q; ++i) { ll ans = inf; for (int w = 0; w < N; ++w) { for (auto [l, r, x] : intervals[U[i]][w]) { if (l <= T[i] && T[i] <= r) { if (w == V[i]) { ans = min(ans, x); } else { ans = min(ans, S - T[i] + dist[w][V[i]]); } } } } sol[i] = ans; } return sol; } int main() { ios::sync_with_stdio(false); cin.tie(0); int N, M, S, Q; cin >> N >> M >> S >> Q; vector<int> A(M), B(M), U(Q), V(Q); vector<ll> L(M), C(M), T(Q); for (int i = 0; i < M; ++i) cin >> A[i] >> B[i] >> L[i] >> C[i]; for (int i = 0; i < Q; ++i) cin >> U[i] >> V[i] >> T[i]; vector<ll> sol = calculate_necessary_time(N, M, S, Q, A, B, L, C, U, V, T); for (int i = 0; i < Q; ++i) cout << sol[i] << "\n"; return 0; }

Compilation message (stderr)

/usr/bin/ld: /tmp/ccUvNptA.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cc2fImyC.o:escape_route.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status