#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll inf = 1e14;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int n, m, k;
cin >> n >> m >> k;
ll a[n+1][2*k+1], DD[n+1][n+1], A[n+1][n+1];
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= 2*k; ++j) cin >> a[i][j];
}
for (int i = 1; i <= n; ++i) fill(DD[i], DD[i]+n+1, 1e13);
for (int i = 1; i <= m; ++i) {
int u, v; ll w;
cin >> u >> v >> w;
DD[u][v] = min(DD[u][v], w);
}
for (int z = 1; z <= n; ++z) {
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) DD[i][j] = min({DD[i][z] + DD[z][j], DD[i][j]});
}
}
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
A[i][j] = 0;
for (int z = 1; z <= 2*k; z+=2) {
if (a[i][z] != -1 && a[j][z+1] != -1) A[i][j] = max(A[i][j], a[j][z+1] - a[i][z]);
}
}
}
ll l = 0, r = 1e9, ans=0;
while (l <= r) {
ll m = (l + r)/2;
ll di[n+1][n+1];
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) di[i][j] = A[i][j] - (m > inf / DD[i][j] ? inf : m * DD[i][j]);
}
for (int z = 1; z <= n; ++z) {
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) di[i][j] = max(di[i][j], di[i][z] + di[z][j]);
}
}
bool ok = 0;
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
if (di[i][j] + di[j][i] >= 0) ok = 1;
}
}
if (ok)
l = m+1, ans = m;
else
r = m-1;
}
cout << ans << '\n';
}
# | 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... |