제출 #408380

#제출 시각아이디문제언어결과실행 시간메모리
408380syl123456여행하는 상인 (APIO17_merchant)C++17
100 / 100
200 ms3316 KiB
#include <bits/stdc++.h> #define all(i) (i).begin(), (i).end() #define debug(x) cerr << "Line(" << __LINE__ << ") -> " << #x << " is " << x << endl using namespace std; template<typename T1, typename T2> ostream& operator << (ostream &i, pair<T1, T2> j) { return i << j.first << ' ' << j.second; } template<typename T> ostream& operator << (ostream &i, vector<T> j) { i << '{' << j.size() << ':'; for (T ii : j) i << ' ' << ii; return i << '}'; } typedef long long ll; typedef pair<int, int> pi; const int inf = 1e9 + 1; signed main() { ios::sync_with_stdio(0), cin.tie(0); int n, m, k; cin >> n >> m >> k; vector<vector<int>> b(n, vector<int>(k)), s(n, vector<int>(k)); for (int i = 0; i < n; ++i) for (int j = 0; j < k; ++j) cin >> b[i][j] >> s[i][j]; vector<vector<int>> dis(n, vector<int>(n, inf)); for (int i = 0; i < n; ++i) dis[i][i] = 0; for (int i = 0; i < m; ++i) { int x, y, z; cin >> x >> y >> z; dis[x - 1][y - 1] = z; } for (int ii = 0; ii < n; ++ii) for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) dis[i][j] = min(dis[i][j], dis[i][ii] + dis[ii][j]); vector<vector<int>> v(n, vector<int>(n, 0)); for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) for (int ii = 0; ii < k; ++ii) if (~s[j][ii] && ~b[i][ii]) v[i][j] = max(v[i][j], s[j][ii] - b[i][ii]); int l = 0, r = inf; vector<vector<ll>> tmp(n, vector<ll>(n)); while (l < r - 1) { int mid = l + r >> 1; for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) tmp[i][j] = v[i][j] - 1ll * mid * dis[i][j]; bool ok = false; for (int ii = 0; ii < n; ++ii) for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) if (dis[i][ii] < inf && dis[ii][j] < inf) { if (i == j && i != ii && tmp[i][ii] + tmp[ii][j] >= 0) { ok = true; goto out; } tmp[i][j] = max(tmp[i][j], tmp[i][ii] + tmp[ii][j]); } out: if (ok) l = mid; else r = mid; } cout << l; } /* * 0<x<1e9, 0<=ans<=1e9 * y/x >= k ? y-kx >= 0 * * nm all dis * logC * n^2 v[i][j] = max(s[j][ii] - b[i][ii], all ii) - ans * dis[i][j] * n^3 po-cycle * */

컴파일 시 표준 에러 (stderr) 메시지

merchant.cpp: In function 'int main()':
merchant.cpp:40:21: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   40 |         int mid = l + r >> 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...