# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
198586 | 2020-01-26T17:33:46 Z | Akashi | Restore Array (RMI19_restore) | C++14 | 600 ms | 26140 KB |
/** 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){ 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); int l, r, k, val; for(int i = 1; i <= n ; ++i) add_edge(i - 1, i, 1); 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); } 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
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 5 ms | 376 KB | Output is correct |
2 | Incorrect | 5 ms | 376 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 16 ms | 760 KB | Output is correct |
2 | Correct | 18 ms | 760 KB | Output is correct |
3 | Correct | 18 ms | 760 KB | Output is correct |
4 | Correct | 16 ms | 760 KB | Output is correct |
5 | Execution timed out | 619 ms | 26140 KB | Time limit exceeded |
6 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 16 ms | 760 KB | Output is correct |
2 | Correct | 18 ms | 760 KB | Output is correct |
3 | Correct | 18 ms | 760 KB | Output is correct |
4 | Correct | 16 ms | 760 KB | Output is correct |
5 | Execution timed out | 619 ms | 26140 KB | Time limit exceeded |
6 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 5 ms | 376 KB | Output is correct |
2 | Incorrect | 5 ms | 376 KB | Output isn't correct |
3 | Halted | 0 ms | 0 KB | - |