Submission #1343819

#TimeUsernameProblemLanguageResultExecution timeMemory
1343819PakinDioxideJakarta Skyscrapers (APIO15_skyscraper)C++17
0 / 100
1 ms1092 KiB
#include <bits/stdc++.h>
#define ll long long

using namespace std;

const int mxN = 3e4+5;

int n, m, sqT;
map <pair <int, int>, vector <int>> adj;
vector <int> ID[mxN];
ll dis[mxN];

int main() {
    ios::sync_with_stdio(0), cin.tie(0);
    cin >> n >> m;
    sqT = ceil(sqrt(n));
    pair <int, int> a[m];
    for (int idx = 0; idx < m; idx++) {
        auto &[p, q] = a[idx];
        cin >> p >> q;
        ID[p].emplace_back(idx);
        for (int i = 1; i <= sqT; i++) adj[{p%i, i}].emplace_back(idx);
    }
    for (int i = 0; i < m; i++) dis[i] = LLONG_MAX;
    dis[0] = 0;
    priority_queue <pair <ll, int>> q;
    q.emplace(0, 0);
    while (q.size()) {
        auto [w, u] = q.top(); q.pop();
        w = -w;
        if (dis[u] != w) continue;
        if (u == 1) {
            cout << w << '\n';
            return 0;
        }
        if (a[u].second <= sqT) {
            for (auto &v : adj[{a[u].first % a[u].second, a[u].second}]) if (v != u) {
                ll nw = w + abs(a[u].first - a[v].first) / a[u].second;
                if (dis[v] > nw) q.emplace(-(dis[v] = nw), v);
            }
        } else {
            for (int it = u + a[u].second; it <= n; it += a[u].second) for (auto v : ID[it]) if (v != u) {
                ll nw = w + abs(a[u].first - a[v].first) / a[u].second;
                if (dis[v] > nw) q.emplace(-(dis[v] = nw), v);
            }
            for (int it = u - a[u].second; it >= 0; it -= a[u].second) for (auto v : ID[it]) if (v != u) {
                ll nw = w + abs(a[u].first - a[v].first) / a[u].second;
                if (dis[v] > nw) q.emplace(-(dis[v] = nw), v);
            }
        }
    }
    cout << -1 << '\n';
}
#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...