제출 #1196846

#제출 시각아이디문제언어결과실행 시간메모리
1196846trufanov.p여행하는 상인 (APIO17_merchant)C++20
100 / 100
50 ms2120 KiB
#include <iostream> #include <vector> #include <algorithm> #include <string> #include <numeric> using namespace std; typedef long long ll; #pragma GCC optimize ("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") const ll LLINF = 1e9 + 5; bool existsNegativeLoop(ll x, const vector<vector<ll>>& profit, const vector<vector<ll>>& dist) { int n = profit.size(); vector<vector<ll>> gr(n, vector<ll>(n)); for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { gr[i][j] = x * dist[i][j] - profit[i][j]; } } for (int i = 0; i < n; ++i) { gr[i][i] = LLINF; } for (int q = 0; q < n; ++q) { for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { gr[i][j] = min(gr[i][j], gr[i][q] + gr[q][j]); } } } for (int i = 0; i < n; ++i) { if (gr[i][i] <= 0) { return true; } } return false; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); int n, m, k; cin >> n >> m >> k; vector<vector<ll>> buy(n, vector<ll>(k)); vector<vector<ll>> sell(n, vector<ll>(k)); for (int i = 0; i < n; ++i) { for (int j = 0; j < k; ++j) { cin >> buy[i][j] >> sell[i][j]; } } vector<vector<ll>> matr(n, vector<ll>(n, LLINF)); for (int i = 0; i < m; ++i) { int u, v; ll t; cin >> u >> v >> t; matr[u - 1][v - 1] = t; } for (int i = 0; i < n; ++i) { matr[i][i] = 0; } vector<vector<ll>> dist = matr; for (int q = 0; q < n; ++q) { for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { dist[i][j] = min(dist[i][j], dist[i][q] + dist[q][j]); } } } vector<vector<ll>> profit(n, vector<ll>(n)); for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { if (i == j || dist[i][j] == LLINF) { continue; } for (int q = 0; q < k; ++q) { if (buy[i][q] == -1 || sell[j][q] == -1) { continue; } profit[i][j] = max(profit[i][j], sell[j][q] - buy[i][q]); } } } ll l = 0, r = 1e9; while (r - l > 1) { ll m = (l + r) / 2; if (existsNegativeLoop(m, profit, dist)) { l = m; } else { r = m; } } cout << l << '\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...