#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define sz(a) (int)((a).size())
#define all(a) (a).begin(), (a).end()
#define lsb(x) (x & (-x))
#define vi vector<int>
#define YES { cout << "YES" << endl; return; }
#define NO { cout << "NO" << endl; return; }
using ll = long long;
using pii = std::pair<int, int>;
const int NMAX = 5e3;
using namespace std;
vector<array<int, 3>>edges;
int lowsum[NMAX + 5], n, m;
bool bellman_ford() {
fill(lowsum, lowsum + n + 1, INT_MAX);
lowsum[0] = 0;
int lst = -1;
for (int i = 0; i <= n; ++i) {
lst = -1;
for (auto &[u, v, w] : edges) {
if (lowsum[u] != INT_MAX && lowsum[u] + w < lowsum[v]) {
lowsum[v] = lowsum[u] + w;
lst = v;
}
}
if (lst == -1)break;
}
return (lst == -1);
}
signed main() {
cin.tie(nullptr)->sync_with_stdio(false);
cin >> n >> m;
for (int i = 0, l, r, k, val; i < m; ++i) {
cin >> l >> r >> k >> val;
++l, ++r;
if (val == 0)
edges.push_back({l - 1, r, (r - l + 1) - k});
if (val == 1)
edges.push_back({r, l - 1, (k - 1) - (r - l + 1)});
}
for (int i = 1; i <= n; ++i) {
edges.push_back({i, i - 1, 0});
edges.push_back({i - 1, i, 1});
}
if (!bellman_ford()) {
cout << "-1\n";
exit(0);
}
for (int i = 1; i <= n; ++i)
cout << lowsum[i] - lowsum[i - 1] << " \n"[i == n];
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... |