Submission #1288127

#TimeUsernameProblemLanguageResultExecution timeMemory
1288127domiRestore Array (RMI19_restore)C++20
100 / 100
274 ms1356 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...