Submission #367445

#TimeUsernameProblemLanguageResultExecution timeMemory
367445alextodoranRestore Array (RMI19_restore)C++17
100 / 100
95 ms1132 KiB
/**
 ____ ____ ____ ____ ____
||a |||t |||o |||d |||o ||
||__|||__|||__|||__|||__||
|/__\|/__\|/__\|/__\|/__\|

**/

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N_MAX = 5002;
const int M_MAX = 10002;

int n, m;

struct Edge
{
    int u;
    int len;
};

vector <Edge> edges[N_MAX];

void addMinDiff (int u, int v, int d)
{
    edges[u].push_back(Edge{v, -d});
}

void addMaxDiff (int u, int v, int d)
{
    edges[v].push_back(Edge{u, d});
}

int dist[N_MAX];

queue <int> q;

int times[N_MAX];

bool inq[N_MAX];

bool BellmanFord ()
{
    for(int i = 0; i <= n; i++)
        dist[i] = INT_MAX;
    dist[0] = 0;
    inq[0] = true;
    q.push(0);
    while(q.empty() == false)
    {
        int u = q.front();
        q.pop();
        inq[u] = false;
        for(Edge &e : edges[u])
            if(dist[u] + e.len < dist[e.u])
            {
                dist[e.u] = dist[u] + e.len;
                if(dist[e.u] < 0)
                    return false;
                if(inq[e.u] == false)
                {
                    q.push(e.u);
                    inq[e.u] = true;
                }
            }
    }
    return true;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
    {
        addMinDiff(i, i - 1, 0);
        addMaxDiff(i, i - 1, 1);
    }
    for(int i = 1; i <= m; i++)
    {
        int l, r, k;
        bool val;
        cin >> l >> r >> k >> val;
        l++;
        r++;
        if(val == 0)
            addMinDiff(r, l - 1, k);
        else
            addMaxDiff(r, l - 1, k - 1);
    }
    if(BellmanFord() == true)
    {
        for(int i = 1; i <= n; i++)
            cout << 1 - (dist[i] - dist[i - 1]) << " ";
        cout << "\n";
    }
    else
        cout << "-1\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...