Submission #1163164

#TimeUsernameProblemLanguageResultExecution timeMemory
1163164thinknoexitTravelling Merchant (APIO17_merchant)C++20
0 / 100
90 ms2120 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; const int N = 103; const int K = 1010; const ll INF = 1e18; ll b[N][K], s[N][K]; ll dist[N][N], dis[N][N], diss[N][N]; int main() { cin.tie(nullptr)->sync_with_stdio(false); int n, m, k; 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]; } for (int i = 1;i <= n;i++) { for (int j = 1;j <= n;j++) { dist[i][j] = INF; } } for (int i = 1;i <= m;i++) { int u, v; ll t; cin >> u >> v >> t; dist[u][v] = min(dist[u][v], t); } for (int k = 1;k <= n;k++) { for (int i = 1;i <= n;i++) { for (int j = 1;j <= n;j++) { if (dist[i][j] > dist[i][k] + dist[k][j]) { dist[i][j] = dist[i][k] + dist[k][j]; } } } } for (int i = 1;i <= n;i++) { for (int j = 1;j <= n;j++) { ll mx = -INF; for (int l = 1;l <= k;l++) { if (b[i][l] == -1 || s[j][l] == -1) continue; mx = max(mx, s[j][l] - b[i][l]); } diss[i][j] = mx; } } ll l = 0, r = 1e9 + 1; while (l + 1 < r) { ll mid = (l + r) / 2; for (int i = 1;i <= n;i++) { for (int j = 1;j <= n;j++) { dis[i][j] = mid * min(INF / mid, dist[i][j]) - diss[i][j]; } } for (int k = 1;k <= n;k++) { for (int i = 1;i <= n;i++) { for (int j = 1;j <= n;j++) { if (dis[i][j] > dis[i][k] + dis[k][j]) { dis[i][j] = dis[i][k] + dis[k][j]; } } } } bool ch = 0; for (int i = 1;i <= n;i++) { if (dis[i][i] <= 0) ch = 1; } if (ch) l = mid; else r = mid - 1; } cout << l << '\n'; return 0; } /* 4 5 2 10 9 5 2 6 4 20 15 9 7 10 9 -1 -1 16 11 1 2 3 2 3 3 1 4 1 4 3 1 3 1 1 */
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...