#include "bits/stdc++.h"
using namespace std;
#ifdef duc_debug
#include "bits/debug.h"
#else
#define debug(...)
#endif
const int maxn = 1005;
const int N = 1e4 + 4;
int n, m, k;
int eu[N], ev[N], ew[N];
int w[maxn][maxn];
int b[maxn][maxn], s[maxn][maxn];
long long ds[105][105];
long long d[105][105];
bool check(int mid) {
memset(d, 0x3f, sizeof(d));
for (int u = 1; u <= n; ++u) {
for (int v = 1; v <= n; ++v) {
if (ds[u][v] < 1e14) {
d[u][v] = 1ll * mid * ds[u][v];
}
for (int j = 1; j <= k; ++j) {
if (b[u][j] != -1 and s[v][j] != -1) {
if (ds[u][v] < 1e14) {
d[u][v] = min(d[u][v], 1ll * mid * ds[u][v] + b[u][j] - s[v][j]);
}
}
}
debug(mid, u, v, d[u][v]);
}
}
for (int w = 1; w <= n; ++w) {
for (int u = 1; u <= n; ++u) {
for (int v = 1; v <= n; ++v) {
d[u][v] = min(d[u][v], d[u][w] + d[w][v]);
}
}
}
for (int i = 1; i <= n; ++i) {
if (d[i][i] <= 0) return 1;
}
return 0;
}
void solve() {
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];
}
memset(ds, 0x3f, sizeof(ds));
for (int i = 1; i <= m; ++i) {
int u, v, c; cin >> u >> v >> c;
w[u][v] = c;
eu[i] = u, ev[i] = v, ew[i] = c;
ds[u][v] = c;
}
for (int w = 1; w <= n; ++w) {
for (int u = 1; u <= n; ++u) {
for (int v = 1; v <= n; ++v) {
ds[u][v] = min(ds[u][v], ds[u][w] + ds[w][v]);
}
}
}
int l = 1, r = 1e9, res = 0;
while (l <= r) {
int mid = (l + r) >> 1;
if (check(mid)) res = mid, l = mid + 1;
else r = mid - 1;
}
cout << res;
}
signed main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
solve();
return 0;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |