# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
198587 | Akashi | Restore Array (RMI19_restore) | C++14 | 179 ms | 1016 KiB |
This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
/**
daca val = 0 atunci inseamna ca intervalul meu are cel putin k de 0 deci
suma maxima pe intervalul meu este (r - l + 1) - k
* sum[r] - sum[l - 1] <= (r - l + 1) - k
daca val = 1 atunci inseamna ca am maxim k - 1 de 0 deci
suma minima pe intervalul meu este (r - l + 1) - (k - 1)
* sum[r] - sum[l - 1] >= (r - l + 1) - (k - 1)
* sum[l - 1] - sum[r] <= (k - 1) - (r - l + 1)
intre doua adiacente am :
* sum[i] - sum[i - 1] <= 1
muchiile j->i : xi - xj <= c, (in shortest path devine : di <= dj + c)
**/
#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
int n, m;
vector <pair <int, int> > v[5005];
void add_edge(int x, int y, int c){
cerr << x << " " << y << " " << c << endl;
v[x].push_back({y, c});
}
int d[5005], viz[5005];
queue <int> q;
bool bellman(){
for(int i = 1; i <= n ; ++i) d[i] = INF;
q.push(0);
d[0] = 0;
while(!q.empty()){
int nod = q.front();
q.pop();
++viz[nod];
if(viz[nod] > n + 1) return 0;
for(auto it : v[nod]){
if(d[it.first] > d[nod] + it.second){
d[it.first] = d[nod] + it.second;
q.push(it.first);
}
}
}
return 1;
}
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= n ; ++i) add_edge(i - 1, i, 1);
int l, r, k, val;
for(int i = 1; i <= m ; ++i){
scanf("%d%d%d%d", &l, &r, &k, &val);
++l; ++r;
if(val == 1) add_edge(r, l - 1, (k - 1) - (r - l + 1));
else add_edge(l - 1, r, (r - l + 1) - k);
}
for(int i = 0; i <= n ; ++i) sort(v[i].begin(), v[i].end());
bool ok = bellman();
if(!ok) printf("-1");
else{
for(int i = 1; i <= n ; ++i)
printf("%d ", d[i] - d[i - 1]);
}
return 0;
}
Compilation message (stderr)
# | 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... |