# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
678064 | Cross_Ratio | Jakarta Skyscrapers (APIO15_skyscraper) | C++14 | 992 ms | 3980 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;
const int INF = 1e9;
int B[30005];
int C[30005];
int dis[30005];
bool vis[30005];
vector<int> V[30005];
typedef pair<int,int> P;
signed main() {
cin.sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int N, M;
cin >> N >> M;
clock_t st = clock();
int i, j;
for(i=0;i<M;i++) cin >> B[i] >> C[i];
for(i=0;i<N;i++) dis[i] = INF;
for(i=0;i<M;i++) V[B[i]].push_back(i);
dis[B[0]] = 0;
priority_queue<P,vector<P>,greater<P>> PQ;
PQ.push(P(0,B[0]));
while(!PQ.empty()) {
if(clock() - st >= 990000) break;
P k2 = PQ.top();
PQ.pop();
int id = k2.second;
if(vis[id]) continue;
vis[id] = true;
set<int> S;
for(int k : V[id]) {
if(S.find(C[k])!=S.end()) continue;
S.insert(C[k]);
int st = B[k] % C[k];
assert(B[k]==id);
for(i=st;i<N;i+=C[k]) {
int d = abs(i - B[k]) / C[k];
if(dis[i] > dis[id] + d) {
dis[i] = dis[id] + d;
PQ.push(P(dis[i], i));
}
}
}
}
cout << (dis[B[1]]==INF?-1:dis[B[1]]);
}
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... |