Submission #1200573

#TimeUsernameProblemLanguageResultExecution timeMemory
1200573zh_hJakarta Skyscrapers (APIO15_skyscraper)C++20
0 / 100
0 ms328 KiB
#include <bits/stdc++.h>
#define lint long long int
#define pb push_back
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;

    vector<int> b(m), p(m);
    for (int i = 0; i < m; i ++) {
        cin >> b[i] >> p[i];
    }
    
    vector<vector<pair<int, int>>> edge(m);
    for (int i = 0; i < m-1; i ++) {
        for (int j = i+1; j < m; j ++) {
            int dis = abs(b[i]-b[j]);
            if (dis % p[i] == 0) {
                edge[i].pb({j, dis/p[i]});
                edge[j].pb({i, dis/p[i]});
            }
        }
    }

    vector<int> dist(m, 1e9+1);
    dist[0] = 0;
    vector<bool> visited(m, false);

    priority_queue<pair<int, int>> pq;
    pq.push({0, 0});
    while (!pq.empty()) {
        int v = pq.top().second;
        pq.pop();

        if (visited[v]) continue;
        visited[v] = true;

        for (auto [u, w] : edge[v]) {
            if (dist[u] > dist[v] + w) {
                dist[u] = dist[v] + w;
                pq.push({-dist[u], u});
            }
        }
    }

    if (dist[1] == 1e9+1) {dist[1] = -1;}
    cout << dist[1] << endl;

    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...