제출 #1325986

#제출 시각아이디문제언어결과실행 시간메모리
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...