#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);
adiacenta[indice].emplace_back(indice - 1 , 0);
distanta[indice] = 1000000000;
}
while (numar_muchii--)
{
int stanga , dreapta , termen , valoare;
cin >> stanga >> dreapta >> termen >> valoare;
stanga++;
dreapta++;
if (valoare == 0) { adiacenta[dreapta].emplace_back(stanga - 1 , -termen); }
else { adiacenta[stanga - 1].emplace_back(dreapta , termen - 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]) ^ 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 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... |