Submission #1325986

#TimeUsernameProblemLanguageResultExecution timeMemory
1325986apxoTravelling Merchant (APIO17_merchant)C++20
100 / 100
659 ms1920 KiB
#include "bits/stdc++.h"

using namespace std;

#ifdef duc_debug
#include "bits/debug.h"
#else
#define debug(...)
#endif

const int maxn = 1005;
const int N = 1e4 + 4;
int n, m, k;
int eu[N], ev[N], ew[N];
int w[maxn][maxn];
int b[maxn][maxn], s[maxn][maxn];
long long ds[105][105];
long long d[105][105];

bool check(int mid) {
  memset(d, 0x3f, sizeof(d));
  for (int u = 1; u <= n; ++u) {
    for (int v = 1; v <= n; ++v) {
      if (ds[u][v] < 1e14) {
        d[u][v] = 1ll * mid * ds[u][v];
      }
      for (int j = 1; j <= k; ++j) {
        if (b[u][j] != -1 and s[v][j] != -1) {
          if (ds[u][v] < 1e14) {
            d[u][v] = min(d[u][v], 1ll * mid * ds[u][v] + b[u][j] - s[v][j]);
          }
        }
      }
      debug(mid, u, v, d[u][v]);
    }
  }
  for (int w = 1; w <= n; ++w) {
    for (int u = 1; u <= n; ++u) {
      for (int v = 1; v <= n; ++v) {
        d[u][v] = min(d[u][v], d[u][w] + d[w][v]);
      }
    }
  }
  for (int i = 1; i <= n; ++i) {
    if (d[i][i] <= 0) return 1;
  }
  return 0;
}

void solve() {
  cin >> n >> m >> k;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= k; ++j) cin >> b[i][j] >> s[i][j];
  }
  memset(ds, 0x3f, sizeof(ds));
  for (int i = 1; i <= m; ++i) {
    int u, v, c; cin >> u >> v >> c;
    w[u][v] = c;
    eu[i] = u, ev[i] = v, ew[i] = c;
    ds[u][v] = c;
  }
  for (int w = 1; w <= n; ++w) {
    for (int u = 1; u <= n; ++u) {
      for (int v = 1; v <= n; ++v) {
        ds[u][v] = min(ds[u][v], ds[u][w] + ds[w][v]);
      }
    }
  }
  int l = 1, r = 1e9, res = 0;
  while (l <= r) {
    int mid = (l + r) >> 1;
    if (check(mid)) res = mid, l = mid + 1;
    else r = mid - 1;
  }
  cout << res;
}

signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);

  solve();

  return 0;
}


#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...