제출 #1123533

#제출 시각아이디문제언어결과실행 시간메모리
1123533hmm789여행하는 상인 (APIO17_merchant)C++20
100 / 100
64 ms2160 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define INF 1000000000 int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, m, k, x, y, z; cin >> n >> m >> k; int b[n][k], s[n][k], w[n][n], p[n][n]; for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) w[i][j] = INF; for(int i = 0; i < n; i++) { for(int j = 0; j < k; j++) cin >> b[i][j] >> s[i][j]; } for(int i = 0; i < m; i++) { cin >> x >> y >> z; x--; y--; w[x][y] = z; } for(int k = 0; k < n; k++) { for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { w[i][j] = min(w[i][j], w[i][k] + w[k][j]); } } } for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) { p[i][j] = 0; for(int it = 0; it < k; it++) if(s[j][it] != -1 && b[i][it] != -1) { p[i][j] = max(p[i][j], s[j][it] - b[i][it]); } } int l = 0, r = INF, md; while(l < r) { md = (l+r)/2; int dist[n][n]; for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) { dist[i][j] = w[i][j]*md - p[i][j]; } for(int k = 0; k < n; k++) { for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]); } } } bool ok = false; for(int i = 0; i < n; i++) if(dist[i][i] <= 0) ok = true; if(ok) l = md+1; else r = md; } cout << l-1 << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...