# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
198586 | Akashi | Restore Array (RMI19_restore) | C++14 | 619 ms | 26140 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
/**
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;
}
컴파일 시 표준 에러 (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... |