Submission #1210147

#TimeUsernameProblemLanguageResultExecution timeMemory
1210147anfiJakarta Skyscrapers (APIO15_skyscraper)C++20
100 / 100
543 ms10028 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
const long long inf = 1e18;

signed main(){
    int n,m; cin >> n >> m;
    int ans = 0, en = 0;
    vector<int> adj[n+7];
    vector<int> vis(n+7, inf);
    priority_queue<pair<int,int>, vector<pair<int,int>>, greater<pair<int,int>>> pq;
    for(int i = 0; i < m; i++){
        int u,v; cin >> u >> v; u++;
        adj[u].push_back(v);
        if(i == 0) {pq.push({0LL, u}); vis[u] = 0;}
        if(i == 1) en = u;
    }
    for(int i = 1; i <= n; i++){
        sort(adj[i].begin(), adj[i].end());
        adj[i].erase(unique(adj[i].begin(), adj[i].end()), adj[i].end());
    }

    while(!pq.empty()){
        auto [di ,nw] = pq.top(); pq.pop();
        if(nw == en){
            cout << vis[nw] << "\n"; exit(0);
        }
        if(di > vis[nw]) continue;
        for(int p : adj[nw]){
            int anfi = 1;
            for(int i = p+nw; i <= n; i += p){
                if(vis[i] > vis[nw]+anfi){
                    vis[i] = vis[nw]+anfi;                    
                    pq.push({vis[i], i});
                }
                anfi++;
            }
            anfi = 1;
            for(int i = nw-p; i >= 1; i-= p){
                if(vis[i] > vis[nw]+anfi){
                    vis[i] = vis[nw]+anfi;                    
                    pq.push({vis[i],i});
                }
                anfi++;
            }
        }
    }
    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...