제출 #1130846

#제출 시각아이디문제언어결과실행 시간메모리
1130846I_FloPPed21여행하는 상인 (APIO17_merchant)C++20
0 / 100
69 ms836 KiB
#include <iostream> using namespace std; const int N=101; long long dp[N][N],s[N][N],b[N][N],timp[N][N],sol[N][N]; int n,m,k; void citeste() { cin>>n>>m>>k; for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { dp[i][j]=-1e13; timp[i][j]=1e16; } for(int j=1; j<=k; j++) { cin>>b[i][j]>>s[i][j]; } } for(int i=1; i<=m; i++) { int a,b; long long c; cin>>a>>b>>c; timp[a][b]=c; } for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) { for(int j=1; j<=n; j++) { timp[i][j]=min(timp[i][j],timp[i][k]+timp[k][j]); } } for(int t=1;t<=k;t++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(b[i][t]!=-1&&s[j][t]!=-1) { dp[i][j]=max(dp[i][j],s[j][t]-b[i][t]); } } } } long long st=0,dr=1e13,ans=0; while(st<=dr) { long long mid=(st+dr)/2; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { sol[i][j]=-mid*timp[i][j]+dp[i][j]; } for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { sol[i][j]=max(sol[i][j],sol[i][k]+sol[k][j]); } } } bool da=false; for(int i=1;i<=n;i++) { if(sol[i][i]>=0) da=true; } if(da) { ans=mid; st=mid+1; } else { dr=mid-1; } } cout<<ans<<'\n'; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); citeste(); 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...