Submission #1344015

#TimeUsernameProblemLanguageResultExecution timeMemory
1344015Born_To_LaughJakarta Skyscrapers (APIO15_skyscraper)C++17
100 / 100
157 ms67796 KiB
// Born_To_Laugh - Hughie Do
#include <bits/stdc++.h>
#define alle(AC) AC.begin(), AC.end()
#define fi first
#define se second
using namespace std;
typedef long long ll;
[[maybe_unused]] const int MOD = 998244353, INF = 1e9 + 7;

const int maxn = 3e4 + 10;
int n, m;
vector<pair<int, int>> adj[maxn];
vector<pair<int, int>> inp;
set<int> s[maxn];

vector<int> dijkstra(int a){
    vector<int> dist(n + 1, INF);
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> pq;
    dist[a] = 0;
    pq.push({0, a});
    while(!pq.empty()){
        int x = pq.top().se;
        int d = pq.top().fi;
        pq.pop();
        if(d > dist[x]) continue;
        for(auto &elm: adj[x]){
            if(dist[elm.fi] > d + elm.se){
                dist[elm.fi] = d + elm.se;
                pq.push({dist[elm.fi], elm.fi});
            }
        }
    }
    return dist;
}

void solve(){
    cin >> n >> m;
    for(int i=0; i<m; ++i){
        int x, y;cin >> x >> y;
        inp.push_back({x, y});
        s[inp[i].fi].insert(y);
    }

    int sta = inp[0].fi, en = inp[1].fi;

    sort(alle(inp));
    inp.erase(unique(alle(inp)), inp.end());

    for(auto &elm: inp){
        int cost = 0;
        for(int i = elm.fi + elm.se; i < n; i += elm.se){
            adj[elm.fi].push_back({i, ++cost});
            if(s[i].find(elm.se) != s[i].end()) break;
        }
        cost = 0;
        for(int i = elm.fi - elm.se; i >= 0; i -= elm.se){
            adj[elm.fi].push_back({i, ++cost});
            if(s[i].find(elm.se) != s[i].end()) break;
        }
    }

    int ans = dijkstra(sta)[en];

    if(ans == INF) cout << -1 << '\n';
    else cout << ans << '\n';
}
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    solve();
}
#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...