// sp[i] = cate 0-uri sunt de la 1 la i. Din restrictiile alea deducem
// cate o conditie
// 0. Daca value=0, inseamna ca sunt cel putin k 0-uri pe intervalul
// ala deci sp[r+1] >= sp[l]+k
// 1. Daca value=1, inseamna ca sunt cel mult k-1 0-uri pe intervalul
// la deci sp[l] >= sp[r+1]-(k-1)
// Si voi face un graf orientat, in care o muchie de la i la j de cost
// c va reprezenta faptul ca sp[i] >= sp[j]+c
// Voi face un brut in care voi calcula valoarea maxiima a lui sp[i],
// ma voi opri atunci cand nu se va mai modifica nimic
#include <stdio.h>
const int MAXN = 5'000;
const int MAXM = 10'000;
int n, m, sp[MAXN + 1];
struct Edge {
int u, v, w;
} edges[MAXM];
void readGraph() {
int i, l, r, k, value;
scanf("%d%d", &n, &m);
for(i = 0; i < m; i++) {
scanf("%d%d%d%d", &l, &r, &k, &value);
if(value == 0) {
edges[i] = {r + 1, l, k};
} else {
edges[i] = {l, r + 1, -(k - 1)};
}
}
}
void computeAnswer() {
int gata, i;
gata = 0;
while(!gata) {
gata = 1;
for(i = 0; i < m; i++) {
if(sp[edges[i].u] < sp[edges[i].v] + edges[i].w) {
gata = 0;
sp[edges[i].u] = sp[edges[i].v] + edges[i].w;
}
}
for(i = 0; i <= n; i++) {
if(sp[i] > i) {
gata = 1;
}
}
}
}
void writeAnswer() {
int i, ok = 1;
for(i = 1; i <= n; i++) {
if(sp[i] > i) {
ok = 0;
}
}
if(ok) {
for(i = 1; i <= n; i++) {
printf("%d ", sp[i] == sp[i - 1]);
}
fputc('\n', stdout);
} else {
printf("-1\n");
}
}
int main() {
readGraph();
computeAnswer();
writeAnswer();
return 0;
}
Compilation message (stderr)
restore.cpp: In function 'void readGraph()':
restore.cpp:28:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
28 | scanf("%d%d", &n, &m);
| ~~~~~^~~~~~~~~~~~~~~~
restore.cpp:30:10: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
30 | scanf("%d%d%d%d", &l, &r, &k, &value);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# | 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... |