Submission #1311876

#TimeUsernameProblemLanguageResultExecution timeMemory
1311876HasanV11010238Travelling Merchant (APIO17_merchant)C++20
0 / 100
91 ms1996 KiB
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 1000000000000000000
int main(){
    ll n, m, k, x, y, co;
    cin>>n>>m>>k;
    vector<vector<ll>> b(n + 1, vector<ll>(k + 1, -1)), s(n + 1, vector<ll>(k + 1, -1));
    for (int i = 1; i <= n; i++){
        for (int j = 1; j <= k; j++){
            cin>>b[i][j]>>s[i][j];
        }
    }
    vector<vector<ll>> di(n + 1, vector<ll>(n + 1, INF)), pr(n + 1, vector<ll>(n + 1, 0));
    for (int i = 1; i  <= m; i++){
        cin>>x>>y>>co;
        di[x][y] = min(di[x][y], co);
    }
    for (int l = 1; l <= n; l++){
        for (int i = 1; i <= n; i++){
            for (int j = 1; j <= n; j++){
                di[i][j] = min(di[i][j], di[i][l] + di[l][j]);
            }
        }
    }
    for (int i = 1; i <= n; i++){
        for (int j = 1; j <= n; j++){
            for (int l = 1; l <= k; l++){
                if (b[i][l] != -1 && s[j][l] != -1) pr[i][j] = max(pr[i][j], s[j][l] - b[i][l]);
            }
        }
    }
    ll l = 1, r = 1000000000000000, best = 0;
    while (l <= r){
        ll mid = (l + r) / 2;
        vector<vector<ll>> dp(n + 1, vector<ll>(n + 1, INF));
        for (int i = 1; i <= n; i++){
            for (int j = 1; j <= n; j++){
                dp[i][j] = mid * di[i][j] - pr[i][j];
            }
        }
        for (int z = 1; z <= n; z++){
            for (int i = 1; i <= n; i++){
                for (int j = 1; j <= n; j++){
                    di[i][j] = min(di[i][j], di[i][z] + di[z][j]);
                }
            }
        }
        bool can = 0;
        for (int i = 1; i <= n; i++){
            for (int j = 1; j <= n; j++){
                if (i == j) continue;
                if (dp[i][j] + dp[j][i] <= 0) can = 1;
            }
        }
        if (can == 1){
            best = mid;
            l = mid + 1;
        }
        else{
            r = mid - 1;
        }
    }
    cout<<best;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...