Submission #106754

#TimeUsernameProblemLanguageResultExecution timeMemory
106754brcodeJakarta Skyscrapers (APIO15_skyscraper)C++14
36 / 100
481 ms263168 KiB
#include <iostream>
#include <queue>
#include <set>
#include <vector>
using namespace std;
priority_queue<pair<int,int>> q1;
const int MAXN = 30010;
set<int> v1[MAXN];
vector<pair<int,int>> g[MAXN];
vector<pair<int,int>> v2;
bool visited[MAXN];
int dp[MAXN];
int target;

int first,jump;
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=0;i<m;i++){
        int b,p;
        cin>>b>>p;
        if(i== 0){
            first = b;
            jump = p;
        }
        if(i == 1){
            target = b;
        }
        v2.push_back(make_pair(b,p));
        v1[b].insert(p);
    }
    for(int i=0;i<m;i++){
        int b = v2[i].first;
        int p = v2[i].second;
        int count = 1;
        for(int i=b+p;i<=n;i+=p){
            if(v1[i].find(p) != v1[i].end()){
                g[b].push_back(make_pair(i,count));
                break;
            }
            g[b].push_back(make_pair(i,count));
            count++;
        }
        count = 1;
        for(int i=b-p;i>=0;i-=p){
            if(v1[i].find(p) != v1[i].end()){
                g[b].push_back(make_pair(i,count));
                break;
            }
            g[b].push_back(make_pair(i,count));
            count++;
        }
    }
    q1.push(make_pair(0,first));
    for(int i=0;i<=n;i++){
        dp[i] = 1e9;
    }
    dp[first] = 0;
    
    while(!q1.empty()){
        auto hold = q1.top();
        int skyscraper = hold.second;
        int dist = -1*hold.first;
       
        q1.pop();
        if(skyscraper == target){
            cout<<dist<<endl;
            return 0;
        }
        if(visited[skyscraper]){
            continue;
        }
        visited[skyscraper] = true;
        for(auto x:g[skyscraper]){
            int w = x.second;
            int to = x.first;
            if(dp[to]>dp[skyscraper]+w){
                dp[to] = dp[skyscraper]+w;
                q1.push(make_pair(-1*dp[to],to));
            }
        }
        
    }
    cout<<-1<<endl;
}
#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...