Submission #1160448

#TimeUsernameProblemLanguageResultExecution timeMemory
1160448AlgorithmWarriorTravelling Merchant (APIO17_merchant)C++20
100 / 100
118 ms2252 KiB
#include <bits/stdc++.h> using namespace std; long long const INF=1e18; int const MAX=105; int n,m,prod; long long buy[MAX][1005]; long long sell[MAX][1005]; long long path[MAX][MAX]; long long profit[MAX][MAX]; void read(){ cin>>n>>m>>prod; int i,j; for(i=1;i<=n;++i) for(j=1;j<=prod;++j) cin>>buy[i][j]>>sell[i][j]; for(i=1;i<=n;++i) for(j=1;j<=n;++j) path[i][j]=INF; for(i=1;i<=m;++i){ int u,v,w; cin>>u>>v>>w; path[u][v]=w; } } void minself(long long& x,long long val){ if(x>val) x=val; } void maxself(long long& x,long long val){ if(x<val) x=val; } void roy_floyd(long long mat[][MAX]){ int i,j,k; for(k=1;k<=n;++k) for(i=1;i<=n;++i) for(j=1;j<=n;++j) minself(mat[i][j],mat[i][k]+mat[k][j]); } void get_profit(){ int i,j,k; for(i=1;i<=n;++i) for(j=1;j<=n;++j){ for(k=1;k<=prod;++k) if(buy[i][k]!=-1 && sell[j][k]!=-1) maxself(profit[i][j],sell[j][k]-buy[i][k]); } } long long way[MAX][MAX]; bool check(int rasp){ int i,j; for(i=1;i<=n;++i) for(j=1;j<=n;++j) if(path[i][j]<INF) way[i][j]=path[i][j]*rasp-profit[i][j]; else way[i][j]=INF; roy_floyd(way); for(i=1;i<=n;++i) if(way[i][i]<=0) return 1; return 0; } int bin_search(){ /// [) int st=0,dr=1e9; while(dr-st>1){ int mij=(st+dr)/2; if(check(mij)) st=mij; else dr=mij; } return st; } int main() { read(); roy_floyd(path); get_profit(); cout<<bin_search(); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...