Submission #1325809

#TimeUsernameProblemLanguageResultExecution timeMemory
1325809AgageldiJakarta Skyscrapers (APIO15_skyscraper)C++20
10 / 100
3 ms568 KiB
#include <bits/stdc++.h>
using namespace std;

#define int long long
#define N 500005

const int inf = 1e18;

int tc = 1, n, B[N], P[N], m, dis[N];
vector <int> E[N];

int32_t main() {
    ios::sync_with_stdio(0);cin.tie(0);
    cin >> n >> m;
    for(int i = 0; i < m; i++) {
        cin >> B[i] >> P[i];
        E[B[i]].push_back(P[i]);
    }
    for(int i = 0; i < n; i++) {
        dis[i] = inf;
    }
    priority_queue <tuple<int,int, int>> q;
    q.push({0, B[0], P[0]});
    dis[B[0]] = 0;
    while(!q.empty()) {
        int pw;
        int ind;
        tie(ignore, ind, pw) = q.top();
        q.pop();
        int c = 0;
        for(int i = ind + pw; i < n; i += pw) {
            c++;
            if(dis[i] <= dis[ind] + c) continue;
            dis[i] = dis[ind] + c;
            for(auto j : E[i]) {
                q.push({-dis[i], i, j});
            }
        }
        c = 0;
        for(int i = ind - pw; i >= 0; i -= pw) {
            c++;
            if(dis[i] <= dis[ind] + c) continue;
            dis[i] = dis[ind] + c;
            for(auto j : E[i]) {
                q.push({-dis[i], i, j});
            }
        }
    }
    if(dis[B[1]] == inf) dis[B[1]] = -1;
    cout << dis[B[1]] << '\n';
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...