제출 #914402

#제출 시각아이디문제언어결과실행 시간메모리
914402duckindog자매 도시 (APIO20_swap)C++14
17 / 100
1946 ms29240 KiB
#include "swap.h"

#include<bits/stdc++.h>

using namespace std;

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];
}
#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...