제출 #1336339

#제출 시각아이디문제언어결과실행 시간메모리
1336339itaykarny여행하는 상인 (APIO17_merchant)C++20
100 / 100
65 ms3796 KiB
#include<iostream>
#include<vector>
#include<algorithm>
#include<bitset>
#include<math.h>
#include<set>
#include<map>
#include<queue>
#include<stack>

using namespace std;
using ll = long long;
using vll = vector<ll>;
using vvll = vector<vll>;
using pll = pair<ll, ll>;
using vpll = vector<pll>;
using vvpll = vector<vpll>;

const ll maxn = 100;
const ll maxk = 1000;
ll b[maxn][2*maxk], s[maxn][2*maxk];
ll dis[maxn][maxn];
ll dis_now[maxn][maxn];
ll profit[maxn][maxn];

ll INF = 1e18;

void floyd_warshal(ll adg[maxn][maxn]) {
	for (ll i = 0; i < maxn; i++) {
		for (ll j = 0; j < maxn; j++) {
			for (ll k = 0; k < maxn; k++) {
				adg[j][k] = min(adg[j][k], adg[j][i] + adg[i][k]);
			}
		}
	}
}

ll solve() {
	ll n, m, k;
	cin >> n >> m >> k;
	for (ll i = 0; i < maxn; i++) {
		for (ll j = 0; j < 2 * maxk; j++) {
			b[i][j] = -1, s[i][j] = -1;
		}
	}
	for (ll i = 0; i < n; i++) {
		for (ll j = 0; j < 2 * k; j += 2) {
			cin >> b[i][j/ 2];
			cin >> s[i][j / 2];
		}
	}
	for (ll i = 0; i < maxn; i++) {
		for (ll j = 0; j < maxn; j++) {
			dis[i][j] = INF;
		}
	}
	for (ll i = 0; i < m; i++) {
		ll v, u, t;
		cin >> v >> u >> t;
		v--, u--;
		dis[v][u] = t;
	}
	floyd_warshal(dis);
	for (ll i = 0; i < maxn; i++) {
		for (ll j = 0; j < maxn; j++) {
			profit[i][j] = 0;
			for (ll p = 0; p < k; p++) {
				if (b[i][p] != -1 && s[j][p] != -1) {
					profit[i][j] = max(profit[i][j], s[j][p] - b[i][p]);
				}
			}
		}
	}
	ll start = 0, end = 1e12;
	ll pos = 0;
	while (start <= end) {
		ll mid = (start + end) / 2;
		for (ll i = 0; i < maxn; i++) {
			for (ll j = 0; j < maxn; j++) {
				dis_now[i][j] = mid * min(dis[i][j], mid == 0 ? INF : INF / mid) -  profit[i][j];
			}
		}
		floyd_warshal(dis_now);
		bool f = false;
		for (ll i = 0; i < maxn; i++) {
			if (dis_now[i][i] <= 0) {
				f = true; break;
			}
		}
		if (f) {
			pos = mid;
			start = mid + 1;
		}
		else {
			end = mid - 1;
		}
	}
	return pos;
}


int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(0);

	cout << solve();
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...