제출 #1162985

#제출 시각아이디문제언어결과실행 시간메모리
1162985thinknoexitTravelling Merchant (APIO17_merchant)C++20
0 / 100
211 ms2192 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; const int N = 103; const int K = 1010; ll b[N][K], s[N][K]; ll dist[N][N], dis[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] = 1e9 + 1; } } 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]; } } } } ll l = 0, r = 1e9; while (l < r) { ll mid = (l + r) / 2; for (int i = 1;i <= n;i++) for (int j = 1;j <= n;j++) { ll mn = 2e18; for (int l = 1;l <= k;l++) { if (b[i][l] == -1 || s[j][l] == -1) continue; mn = min(mn, b[i][l] - s[j][l]); } if (dist[i][j] != 1e9 + 1) dis[i][j] = mn + mid * dist[i][j]; else dis[i][j] = 2e18; } 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) r = mid; else l = mid + 1; } cout << l; 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...