Submission #1364016

#TimeUsernameProblemLanguageResultExecution timeMemory
1364016AzeTurk810Travelling Merchant (APIO17_merchant)C++20
33 / 100
35 ms2204 KiB
/*
Telebe of Adicto && Mamedov yani AzeTurk810
I see humans but no humanity
*/
#include <algorithm>
#include <iostream>
#include <utility>
#include <vector>

// mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

using ll = long long;
using namespace std;

#define ln '\n'
#define INFi 1e9
#define INFll 1e15

#ifdef ONPC
#include <algo.hpp>
#else
#define dbg(...)
#define dbg_out(...)
#endif
#define int ll

int _n, _k;
size_t _m;

vector<vector<ll>> dist, val;
vector<vector<pair<int, int>>> adj, items;

inline void systemd() {
    dist.assign(_n + 1, vector<ll>(_n + 1, INFi));
    val.assign(_n + 1, vector<ll>(_n + 1, 0));
    adj.assign(_n + 1, vector<pair<int, int>>(0));
    items.assign(_n + 1, vector<pair<int, int>>(_k + 1));
}

char solve() {
    if (!(cin >> _n >> _m >> _k))
        return 1;
    systemd();
    for (size_t v = 1; v <= _n; v++) {
        for (size_t j = 1; j <= _k; j++) {
            cin >> items[v][j].first >> items[v][j].second;
        }
        // dist[v][v] = 0;
    }
    for (size_t j = 0; j < _m; j++) {
        int u, v, t;
        cin >> u >> v >> t;
        adj[u].push_back(make_pair(v, t));
        dist[u][v] = t;
    }
    for (int k = 1; k <= _n; k++) {
        for (int v = 1; v <= _n; v++) {
            for (int u = 1; u <= _n; u++) {
                dist[v][u] = min(dist[v][u], dist[v][k] + dist[k][u]);
            }
        }
    }
    for (int i = 1; i <= _n; i++) {
        for (int j = 1; j <= _n; j++) {
            for (int c = 1; c <= _k; c++) {
                if (items[i][c].first != -1 && items[j][c].second != -1) {
                    val[i][j] = max<ll>(val[i][j], items[j][c].second - items[i][c].first);
                }
            }
        }
    }

    int l = 0, r = INFi, mid, ans = 0;
    while (l <= r) {
        mid = (l + r) >> 1LL;
        vector<vector<ll>> cost(_n + 1, vector<ll>(_n + 1, -INFi));
        for (int v = 1; v <= _n; v++) {
            for (int u = 1; u <= _n; u++) {
                cost[v][u] = max(cost[v][u], val[v][u] - (ll)dist[v][u] * mid);
            }
        }
        for (int k = 1; k <= _n; k++) {
            for (int v = 1; v <= _n; v++) {
                for (int u = 1; u <= _n; u++) {
                    cost[v][u] = max(cost[v][u], cost[v][k] + cost[k][u]);
                }
            }
        }
        char ok = false;
        for (int v = 1; v <= _n; v++) {
            ok |= (cost[v][v] >= 0);
        }
        if (ok) {
            l = mid + 1;
            ans = mid;
        } else {
            r = mid - 1;
        }
    }
    cout << ans << ln;
    return 0;
}

// Attack on titan<3

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(nullptr);
    int t = 1e9;
    // cin >> t;
    for (int cases = 0; cases < t; cases++) {
        if (solve())
            break;
#ifdef ONPC
        cerr << "__________\n";
#endif
    }
}
// Just Imaginary
/*
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⣀⠀⠀⠀⢀⣴⣾⠀⠀⠀⡀⢀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⣿⣿⣿⣦⣾⣿⣿⣿⣿⣿⡆⠁⠀⢀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠹⣿⣿⣿⣿⣿⣿⣿⣿⡿⠁⠀⡠⠂⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⠠⠔⠚⣿⣿⣿⣿⣿⣦⡄⠀⠁⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⢀⠠⠐⢂⠉⡀⣀⣤⣄⢻⣿⣿⡟⢈⡹⣿⡀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⡀⠄⠂⠈⠀⣶⣤⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠘⣷⡀⠀⡀⠐⠂⠐⢄
⠀⠀⠀⠀⠀⠀⠀⣿⣿⠟⠿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⣀⣾⣷⠯⠀⠤⠤⠄⠈
⠀⠀⠀⠀⠀⠀⣼⣿⡟⠀⠀⣹⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⣄⡀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⣰⣿⠋⠀⠀⢠⣾⣿⣿⣿⣿⣿⣭⠟⢻⣿⣿⣿⣿⡿⠁⠀⠀⠀⠀
⠀⠀⠀⣀⣶⡟⠁⠀⢾⣶⣿⠟⠉⠈⢻⣿⣿⣿⣦⣜⠀⠛⠛⠿⠁⠀⠀⠀⠀⠀
⠚⠻⠿⠿⡿⠁⠀⢠⣿⣿⠁⠀⣠⠖⠋⠉⠻⣿⣿⣿⣶⡀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⠀⠀⣰⣿⡿⠃⠠⠊⠁⠀⠀⠀⠀⠈⢿⣿⣿⠟⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⠀⢀⣴⡿⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀
⠀⠀⠀⣠⣾⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
⢀⣴⠾⠟⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
*/
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...