Submission #329188

#TimeUsernameProblemLanguageResultExecution timeMemory
329188faresbasbsTravelling Merchant (APIO17_merchant)C++17
100 / 100
98 ms4204 KiB
#include <bits/stdc++.h> using namespace std; const int INF = 1000000000; long long n,m,kk,buy[101][1001],sell[101][1001],graph[101][101],graph2[101][101],profit[101][101]; void floyd(long long adj[101][101]){ for(int k = 1 ; k <= n ; k += 1){ for(int i = 1 ; i <= n ; i += 1){ for(int j = 1 ; j <= n ; j += 1){ adj[i][j] = min(adj[i][j],adj[i][k]+adj[k][j]); } } } } int main(){ ios_base::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL); cin >> n >> m >> kk; for(int i = 1 ; i <= n ; i += 1){ for(int j = 1 ; j <= n ; j += 1){ graph[i][j] = INF; } for(int j = 1 ; j <= kk ; j += 1){ cin >> buy[i][j] >> sell[i][j]; } } for(int i = 0 ; i < m ; i += 1){ int a,b,c; cin >> a >> b >> c; graph[a][b] = c; } floyd(graph); for(int i = 1 ; i <= n ; i += 1){ for(int j = 1 ; j <= n ; j += 1){ for(int k = 1 ; k <= kk ; k += 1){ if(sell[j][k] != -1 && buy[i][k] != -1){ profit[i][j] = max(profit[i][j],sell[j][k]-buy[i][k]); } } } } long long first = 0 , last = INF; while(last-first > 1){ long long mid = (first+last)/2; for(int i = 1 ; i <= n ; i += 1){ for(int j = 1 ; j <= n ; j += 1){ graph2[i][j] = mid*graph[i][j] - profit[i][j]; } } floyd(graph2); bool good = false; for(int i = 1 ; i <= n ; i += 1){ if(graph2[i][i] <= 0){ good = true; break; } } if(good){ first = mid; }else{ last = mid; } } cout << first << endl; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...