Submission #1306963

#TimeUsernameProblemLanguageResultExecution timeMemory
1306963SSKMFRestore Array (RMI19_restore)C++20
13 / 100
141 ms856 KiB
#include <bits/stdc++.h>
using namespace std;

vector < pair <int , int> > adiacenta[5001];
int distanta[5001];

inline void Solve ()
{
    int numar_noduri , numar_muchii;
    cin >> numar_noduri >> numar_muchii;

    for (int indice = 1 ; indice <= numar_noduri ; indice++) {
        adiacenta[indice - 1].emplace_back(indice , 1);
        distanta[indice] = 1000000000;
    }

    while (numar_muchii--)
    {
        int stanga , dreapta , termen , valoare;
        cin >> stanga >> dreapta >> termen >> valoare;

        stanga++;
        dreapta++;

        if (valoare == 0) { adiacenta[stanga - 1].emplace_back(dreapta , dreapta - stanga + 1 - termen); }
        else { adiacenta[dreapta].emplace_back(stanga - 1 , termen - 1 - (dreapta - stanga + 1)); }
    }

    for (int ramas = numar_noduri - 1 ; ramas ; ramas--) {
        for (int nod = 0 ; nod <= numar_noduri ; nod++) {
            for (auto& vecin : adiacenta[nod])
                { distanta[vecin.first] = min(distanta[vecin.first] , distanta[nod] + vecin.second); }
        }
    }

    for (int nod = 0 ; nod <= numar_noduri ; nod++) {
        for (auto& vecin : adiacenta[nod]) {
            if (distanta[vecin.first] > distanta[nod] + vecin.second) 
                { cout << "-1"; return; }
        }
    }
    
    for (int indice = 1 ; indice <= numar_noduri ; indice++) 
        { cout << distanta[indice] - distanta[indice - 1] << ' '; }
}

int main ()
{
    ios :: sync_with_stdio(false);
    cin.tie(NULL); cout.tie(NULL);

    int numar_teste = 1;
    // cin >> numar_teste;
    while (numar_teste--)
        { Solve(); }

    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...