Submission #1281477

#TimeUsernameProblemLanguageResultExecution timeMemory
1281477Jawad_Akbar_JJTravelling Merchant (APIO17_merchant)C++20
100 / 100
101 ms2316 KiB
#include <iostream>
#include <queue>
#include <algorithm>

using namespace std;
#define int long long
const int N = 105, inf = 1e17;
int d[N][N], d2[N][N], b[N][N * 10], s[N][N * 10], prf[N][N];

signed main(){
	int n, m, K;
	cin>>n>>m>>K;

	for (int i=1;i<=n;i++){
		for (int j=1;j<=K;j++)
			cin>>b[i][j]>>s[i][j];
	}

	for (int i=1;i<=n;i++){
		for (int j=1;j<=n;j++){
			if (i == j)
				continue;
			d[i][j] = 1e17;
			for (int k=1;k<=K;k++)
				if (min(b[i][k], s[j][k]) != -1)
				prf[i][j] = max(prf[i][j], - b[i][k] + s[j][k]);
		}
	}

	for (int i=1, a, b, c;i<=m;i++){
		cin>>a>>b>>c;
		d[a][b] = c;
	}

	for (int k=1;k<=n;k++){
		for (int i=1;i<=n;i++)
			for (int j=1;j<=n;j++)
				d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
	}

	int l = 0, r = 1e9 + 7;
	while (l + 1 < r){
		int mid = (l + r) / 2;
		// mid = 3;
		for (int i=1;i<=n;i++){
			for (int j=1;j<=n;j++){
				if (i == j)
					d2[i][j] = -inf;
				else
					d2[i][j] = prf[i][j] - min(mid, inf / d[i][j] + 1) * d[i][j];
			}
		}

		for (int k=1;k<=n;k++){
			for (int i=1;i<=n;i++)
				for (int j=1;j<=n;j++)
					d2[i][j] = max(d2[i][j], d2[i][k] + d2[k][j]);
		}

		bool t = 0;
		for (int i=1;i<=n;i++)
			t |= d2[i][i] >= 0;
		
		if (t)
			l = mid;
		else
			r = mid;
	}
	cout<<l<<'\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...