제출 #1226358

#제출 시각아이디문제언어결과실행 시간메모리
1226358kunzaZa183여행하는 상인 (APIO17_merchant)C++20
0 / 100
304 ms2220 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define int long long signed main() { int n, m, k; cin >> n >> m >> k; vector<vector<int>> status(n, vector<int>(2 * k)); for (auto &a : status) { for (auto &b : a) cin >> b; } const int bign = 1e18; vector<vector<int>> adjmat(n, vector<int>(n, bign)); for (int i = 0; i < m; i++) { int a, b, t; cin >> a >> b >> t; a--, b--; adjmat[a][b] = t; } for (int i = 0; i < n; i++) adjmat[i][i] = 0; for (int rounds = 0; rounds < 6; rounds++) for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) for (int k = 0; k < n; k++) if (adjmat[i][k] != bign && adjmat[k][j] != bign) adjmat[i][j] = min(adjmat[i][j], adjmat[i][k] + adjmat[k][j]); vector<vector<int>> maxp(n, vector<int>(n, 0)); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { for (int in = 0; in < k; in++) { if (status[i][in * 2] != -1 && status[j][in * 2 + 1] != -1) maxp[i][j] = max(maxp[i][j], status[j][in * 2 + 1] - status[i][in * 2]); } } } ll l = 0, r = 1e9, ans = 0; while (l <= r) { int mid = (l + r) / 2; vector<vector<int>> mat(n, vector<int>(n)); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) mat[i][j] = mid * adjmat[i][j] - maxp[i][j]; } for (int i = 0; i < n; i++) mat[i][i] = bign; for (int rounds = 0; rounds < 6; rounds++) for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) for (int k = 0; k < n; k++) mat[i][j] = min(mat[i][j], max(-bign, mat[i][k] + mat[k][j])); for (int i = 0; i < n; i++) if (mat[i][i] <= 0) { l = mid + 1; ans = mid; goto A; } r = mid - 1; A:; } cout << ans << "\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...