제출 #373673

#제출 시각아이디문제언어결과실행 시간메모리
373673abra_stone여행하는 상인 (APIO17_merchant)C++14
100 / 100
169 ms2432 KiB
#include <iostream>
#include <cstdio>
#define N 105
#define K 1005
using namespace std;

typedef long long ll;
ll n, eg, m, b[N][K], s[N][K], d[N][N], mx[N][N], mn[N][N];

bool f(ll p) {
	ll i, j, k;
	for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) mn[i][j] = p * d[i][j] - mx[i][j];
	for (k = 1; k <= n; k++) {
		for (i = 1; i <= n; i++) {
			for (j = 1; j <= n; j++) {
				if (mn[i][k] + mn[k][j] < mn[i][j]) mn[i][j] = mn[i][k] + mn[k][j];
			}
		}
	}
	for (i = 1; i <= n; i++) if (mn[i][i] <= 0) return 1;
	return 0;
}

int main()
{
	ll i, j, k, t1, t2, t3;
	cin >> n >> eg >> m;
	for (i = 1; i <= n; i++) {
		for (j = 1; j <= m; j++) {
			scanf("%lld %lld", &b[i][j], &s[i][j]);
//			if (b[i][j] == -1) b[i][j] = 1e18;
//			if (s[i][j] == -1) s[i][j] = -1e18;
		}
	}
	for (i = 1; i <= n; i++) for (j = 1; j <= n; j++) d[i][j] = 1e9;
	while (eg--) {
		scanf("%lld %lld %lld", &t1, &t2, &t3);
		d[t1][t2] = t3;
	}
	for (k = 1; k <= n; k++) {
		for (i = 1; i <= n; i++) {
			for (j = 1; j <= n; j++) {
				if (d[i][k] + d[k][j] < d[i][j]) d[i][j] = d[i][k] + d[k][j];
			}
		}
	}
	for (i = 1; i <= n; i++) {
		for (j = 1; j <= n; j++) {
			for (k = 1; k <= m; k++) {
				if (s[j][k] != -1 && b[i][k] != -1) mx[i][j] = max(mx[i][j], s[j][k] - b[i][k]);
			}
		}
	}
	ll l = 1, r = 1e9;
//	while (l < r) {
//		ll md = (l + r + 1) / 2;
//		if (f(md)) l = md;
//		else r = md - 1;
//	}
//	cout << l << endl;
	ll ans = 0;
	while (l <= r) {
		ll md = (l + r) / 2;
		if (f(md)) ans = md, l = md + 1;
		else r = md - 1;
	}
    cout << ans << endl;
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

merchant.cpp: In function 'int main()':
merchant.cpp:30:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   30 |    scanf("%lld %lld", &b[i][j], &s[i][j]);
      |    ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
merchant.cpp:37:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   37 |   scanf("%lld %lld %lld", &t1, &t2, &t3);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...