Submission #104621

#TimeUsernameProblemLanguageResultExecution timeMemory
104621lycTravelling Merchant (APIO17_merchant)C++14
100 / 100
115 ms3324 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef pair<int, int> ii; typedef pair<int, ii> iii; typedef pair<ii, int> ri3; #define mp make_pair #define pb push_back #define fi first #define sc second #define SZ(x) (int)(x).size() #define ALL(x) begin(x), end(x) #define REP(i, n) for (int i = 0; i < n; ++i) #define FOR(i, a, b) for (int i = a; i <= b; ++i) #define RFOR(i, a, b) for (int i = a; i >= b; --i) int main() { //freopen("in.txt", "r", stdin); ios::sync_with_stdio(false); cin.tie(0); int n, m, x; cin >> n >> m >> x; int b[n][x], s[n][x]; FOR(i, 0, n-1) { FOR(j, 0, x-1) { cin >> b[i][j] >> s[i][j]; } } int am1[n][n]; memset(am1, -1, sizeof am1); FOR(i, 0, m-1) { int u, v, w; cin >> u >> v >> w; --u, --v; am1[u][v] = w; } FOR(k, 0, n-1) FOR(i, 0, n-1) if (am1[i][k] != -1) FOR(j, 0, n-1) if (am1[k][j] != -1) { if (am1[i][j] == -1 || am1[i][k]+am1[k][j]<am1[i][j]) am1[i][j] = am1[i][k]+am1[k][j]; } int am2[n][n]; FOR(i, 0, n-1) FOR(j, 0, n-1) { am2[i][j] = 0; FOR(k, 0, x-1) if (s[j][k] != -1 && b[i][k] != -1) am2[i][j] = max(am2[i][j], s[j][k]-b[i][k]); } int lo = 0, hi = 1e9+10; while (lo < hi) { int mid = (lo+hi)/2; //sum(w) / sum(dist) >= r; //sum(w) - r*sum(dist) >= 0; //sum(w - r*dist) >= 0; #define NINF (-1e18) ll am3[n][n]; FOR(i, 0, n-1) FOR(j, 0, n-1) { if (am1[i][j] != -1) { am3[i][j] = (ll)am2[i][j] - (ll)mid*am1[i][j]; } else { am3[i][j] = NINF; } } FOR(k, 0, n-1) FOR(i, 0, n-1) if (am3[i][k] != NINF) FOR(j, 0, n-1) if (am3[k][j] != NINF) { am3[i][j] = max(am3[i][j], am3[i][k]+am3[k][j]); } bool ok = false; FOR(i, 0, n-1) ok |= am3[i][i] >= 0; if (ok) lo = mid+1; else hi = mid; } cout << lo-1 << '\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...