Submission #915076

#TimeUsernameProblemLanguageResultExecution timeMemory
915076duckindogSwapping Cities (APIO20_swap)C++14
17 / 100
1893 ms29476 KiB
#include<bits/stdc++.h> using namespace std; //#define LOCAL #ifndef LOCAL #include "swap.h" #endif // LOCAL const int N = 1e3 + 10; int n, m; vector<pair<int, int>> ad[N]; void init(int N, int M, vector<int> U, vector<int> V, vector<int> W) { n = N; m = M; for (int i = 0; i < m; ++i) { int u = U[i], v = V[i], w = W[i]; ad[u].push_back({v, w}); ad[v].push_back({u, w}); } } int f[N][N]; void sktra(int x, int y) { memset(f, 63, sizeof f); using T = tuple<int, int, int>; priority_queue<T, vector<T>, greater<T>> q; q.emplace(f[x][y] = 0, x, y); while (q.size()) { int d, x, y; tie(d, x, y) = q.top(); q.pop(); if (d != f[x][y]) continue; for (auto duck : ad[x]) { int v, w; tie(v, w) = duck; if (v != y && f[v][y] > max(w, d)) q.emplace(f[v][y] = max(w, d), v, y); } for (auto duck : ad[y]) { int v, w; tie(v, w) = duck; if (v != x && f[x][v] > max(w, d)) q.emplace(f[x][v] = max(w, d), x, v); } } } int getMinimumFuelCapacity(int X, int Y) { sktra(X, Y); return f[Y][X] > 1e9 ? -1 : f[Y][X]; } #ifdef LOCAL int32_t main() { cin.tie(0)->sync_with_stdio(0); if (fopen("duck.inp", "r")) { freopen("duck.inp", "r", stdin); freopen("duck.out", "w", stdout); } int n, m; cin >> n >> m; vector<int> U(m), V(m), W(m); for (int i = 0; i < m; ++i) cin >> U[i] >> V[i] >> W[i]; init(n, m, U, V, W); int q; cin >> q; for (int i = 1; i <= q; ++i) { int X, Y; cin >> X >> Y; cout << getMinimumFuelCapacity(X, Y) << '\n'; } } #endif // LOCAL
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...