# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
152159 | songc | Jakarta Skyscrapers (APIO15_skyscraper) | C++14 | 1081 ms | 38228 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.
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> pii;
int N, M, S, E;
vector<int> D[30303];
set<int> dchk;
bool bchk[30303];
struct Data{
int x, y, d;
};
deque<Data> Q;
int main(){
scanf("%d %d", &N, &M);
int x, y;
scanf("%d %d", &x, &y);
D[x].push_back(y);
S = x;
scanf("%d %d", &x, &y);
D[x].push_back(y);
E = x;
for (int i=3; i<=M; i++){
scanf("%d %d", &x, &y);
D[x].push_back(y);
}
for (int v : D[S]){
if (dchk.find(S*N+v) == dchk.end()){
Q.push_back((Data){S, v, 0});
dchk.insert(S*N+v);
}
}
bchk[S] = true;
while (!Q.empty()){
Data T = Q.front();
Q.pop_front();
if (T.x == E){
printf("%d\n", T.d);
return 0;
}
if (!bchk[T.x]){
for (int v : D[T.x]){
if (dchk.find(T.x*N+v) == dchk.end()){
Q.push_front((Data){T.x, v, T.d});
dchk.insert(T.x*N+v);
}
}
bchk[T.x] = true;
}
if (T.x-T.y >= 0 && dchk.find((T.x-T.y)*N+T.y) == dchk.end()){
Q.push_back((Data){T.x-T.y, T.y, T.d+1});
dchk.insert((T.x-T.y)*N+T.y);
}
if (T.x+T.y < N && dchk.find((T.x+T.y)*N+T.y) == dchk.end()){
Q.push_back((Data){T.x+T.y, T.y, T.d+1});
dchk.insert((T.x+T.y)*N+T.y);
}
}
puts("-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... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |