Submission #387169

#TimeUsernameProblemLanguageResultExecution timeMemory
387169kevinxiehkJakarta Skyscrapers (APIO15_skyscraper)C++17
100 / 100
158 ms13276 KiB
#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
#define mp make_pair
#define pb emplace_back
#define fi first
#define se second
#define sint long long
#define int long long
using namespace std;
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    sint n,m,t,tt,s,e;cin>>n>>m;
    int dist[n+5],minadd[n+5];
    vector<sint>conn[n+5];
    set<sint>con2[n+5];
    memset(dist,-1,sizeof dist);
    memset(minadd,-1,sizeof minadd);
    int mtt=0;
    for(int i=0;i<m;i++){
        cin>>t>>tt;
        mtt=max(mtt,tt);
        if(i==0)s=t;
        if(i==1)e=t;
        if(tt!=0)con2[t].insert(tt);
    }
    if(mtt==1){
        cout<<abs(s-e)<<'\n';
        return 0;
    }
    for(int i=0;i<n;i++){
        for(auto&x:con2[i])conn[i].pb(x);
    }
    priority_queue<pair<int,sint>,vector<pair<int,sint>>,greater<>>dij;
    dij.push(mp(0,s));
    while(!dij.empty()){
        sint now=dij.top().se;
        if(dist[now]!=-1){dij.pop();continue;}
        dist[now]=dij.top().fi;
        dij.pop();
        for(auto x:conn[now]){
            //cout<<x;
            int nnow=now-now/x*x;
            while(nnow<n){
                if(now==nnow){nnow+=x;continue;}
                if(dist[nnow]==-1){
                    int di=dist[now]+abs(now-nnow)/x;
                    //cout<<x<<dist[now]+abs(i)<<" "<<minadd[now+i*x];
                    if(di<minadd[nnow]||minadd[nnow]==-1){
                        dij.push(mp(di,nnow));
                        minadd[nnow]=di;
                    }
                }
                nnow+=x;
            }
        }
    }
    //for(int i=0;i<n;i++)cout<<dist[i]<<" ";
    cout<<dist[e]<<"\n";
    return 0;
}

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:59:17: warning: 'e' may be used uninitialized in this function [-Wmaybe-uninitialized]
   59 |     cout<<dist[e]<<"\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...