Submission #1090382

#TimeUsernameProblemLanguageResultExecution timeMemory
1090382makravTravelling Merchant (APIO17_merchant)C++14
0 / 100
97 ms3408 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;

#define all(x) (x).begin(), (x).end()
#define sz(x) (int)(x).size()
#define pb push_back
#define ff first
#define sc second
#define int ll

const int INF = 1e9 + 1;

vector<int> dijkstra(int n, vector<vector<pair<int, int>>> g, int s) {
    vector<int> dist(n, INF);
    dist[s] = 0ll;
    set<pair<int, int>> st;
    for (int i = 0; i < n; i++) st.insert({dist[i], i});
    while (!st.empty()) {
        auto [d, v] = *st.begin();
        st.erase({d, v});
        for (auto &[u, w] : g[v]) {
            if (dist[u] > d + w) {
                st.erase({dist[u], u});
                dist[u] = d + w;
                st.insert({dist[u], u});
            }
        }
    }
    return dist;
}

void solve() {
    int n, m, k; cin >> n >> m >> k;
    vector<vector<int>> b(n, vector<int>(k)), s(n, vector<int>(k));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < k; j++) {
            cin >> b[i][j] >> s[i][j];
        }
    }
    vector<vector<int>> maxprof(n, vector<int>(n));
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (i == j) continue;
            for (int kk = 0; kk < k; kk++) {
                //cout << i << ' ' << j << '\n';
                if (b[i][kk] != -1 && s[j][kk] != -1) {
                    maxprof[i][j] = max(maxprof[i][j], s[j][kk] - b[i][kk]);
                }
            }
        }
    }
    // for (int i = 0; i < n; i++) {
    //     for (int j = 0; j < n; j++) {
    //         cout << maxprof[i][j] << ' ';
    //     }
    //     cout << '\n';
    // }
    vector<vector<pair<int, int>>> g(n);
    for (int i = 0; i < m; i++) {
        int u, v, w; cin >> u >> v >> w;
        u--; v--;
        g[u].pb({v, w});
    }
    vector<vector<int>> dj(n, vector<int>(n));
    for (int i = 0; i < n; i++) dj[i] = dijkstra(n, g, i);

    int L = 0, R = 1e9 + 1;
    while (R - L > 1) {
        int M = (L + R) / 2;
        vector<vector<int>> d(n, vector<int>(n, INF));
        for (int i = 0; i < n; i++) d[i][i] = 0;
        //cout << M << '\n';
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (i == j) continue;
                if (dj[i][j] != INF) d[i][j] = dj[i][j] * M;
                for (int vt = 0; vt < n; vt++) {
                    if (dj[i][vt] != INF && dj[vt][j] != INF) {
                        d[i][j] = min(d[i][j], (dj[i][vt] + dj[vt][j]) * M - maxprof[vt][j]);
                    }
                }
            }
        }
        for (int K=0; K<n; ++K)
	        for (int i=0; i<n; ++i)
		        for (int j=0; j<n; ++j)
			        d[i][j] = min (d[i][j], d[i][K] + d[K][j]);
        bool loop = false;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (i == j) continue;
                if (d[i][j] + d[j][i] <= 0) loop = true;
            }
        }
        if (loop) L = M;
        else R = M;
    }
    cout << L << '\n';
}

signed main() {
    int tt = 1;
    #ifdef LOCAL 
        freopen("in.txt", "r", stdin);
        freopen("out.txt", "w", stdout);
        cin >> tt;
    #else
        ios::sync_with_stdio(false); 
        cin.tie(0); cout.tie(0);
    #endif

    while (tt--) {
        solve();
    }

    return 0;
}

Compilation message (stderr)

merchant.cpp: In function 'std::vector<long long int> dijkstra(ll, std::vector<std::vector<std::pair<long long int, long long int> > >, ll)':
merchant.cpp:21:14: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   21 |         auto [d, v] = *st.begin();
      |              ^
merchant.cpp:23:20: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   23 |         for (auto &[u, w] : g[v]) {
      |                    ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...