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...