Submission #233338

#TimeUsernameProblemLanguageResultExecution timeMemory
233338kshitij_sodaniJakarta Skyscrapers (APIO15_skyscraper)C++17
100 / 100
196 ms110552 KiB
#include <iostream> #include <bits/stdc++.h> using namespace std; typedef int64_t llo; #define mp make_pair #define pb push_back #define a first #define b second int n,m; int aa,bb; const int ss=3; vector<pair<pair<int,int>,int>> adj[30001][ss];//((index,power),dist) int dist[30001][ss]; int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); cin>>n>>m; int st; int endd; memset(dist,-1,sizeof(dist)); for(int j=0;j<m;j++){ cin>>aa>>bb; if(j==0){ st=aa; } if(j==1){ endd=aa; } if(bb>=ss){ for(int i=aa+bb;i<n;i+=bb){ adj[aa][0].pb({{i,0},(i-aa)/bb}); } for(int i=aa-bb;i>=0;i-=bb){ adj[aa][0].pb({{i,0},(aa-i)/bb}); } } else{ adj[aa][0].pb({{aa,bb},0}); // adj[aa][bb].pb({{aa,0},0}); } } /*for(int i=0;i<n;i++){ for(int j=1;j<ss;j++){ if(i+j<n){ adj[i][j].pb({{i+j,j},1}); } if(i-j>=0 and i-j<n){ adj[i][j].pb({{i-j,j},1}); } adj[i][j].pb({{i,0},0}); } }*/ priority_queue<pair<int,pair<int,int>>> ac; ac.push({0,{st,0}}); dist[st][0]=0; while(ac.size()){ pair<int,pair<int,int>> no=ac.top(); ac.pop(); no.a=-no.a; if(dist[no.b.a][no.b.b]<no.a){ continue; } // cout<<no.b.a<<","<<no.b.b<<","<<no.a<<endl; for(auto j:adj[no.b.a][no.b.b]){ if(dist[j.a.a][j.a.b]==-1 or dist[j.a.a][j.a.b]>dist[no.b.a][no.b.b]+j.b){ dist[j.a.a][j.a.b]=dist[no.b.a][no.b.b]+j.b; ac.push({-dist[j.a.a][j.a.b],{j.a}}); } } if(no.b.b>0){ if(no.b.a+no.b.b<n){ if(dist[no.b.a+no.b.b][no.b.b]==-1 or dist[no.b.a+no.b.b][no.b.b]>dist[no.b.a][no.b.b]+1){ dist[no.b.a+no.b.b][no.b.b]=dist[no.b.a][no.b.b]+1; ac.push({-dist[no.b.a+no.b.b][no.b.b],{no.b.a+no.b.b,no.b.b}}); } } if(no.b.a-no.b.b>=0){ if(dist[no.b.a-no.b.b][no.b.b]==-1 or dist[no.b.a-no.b.b][no.b.b]>dist[no.b.a][no.b.b]+1){ dist[no.b.a-no.b.b][no.b.b]=dist[no.b.a][no.b.b]+1; ac.push({-dist[no.b.a-no.b.b][no.b.b],{no.b.a-no.b.b,no.b.b}}); } } if(dist[no.b.a][0]==-1 or dist[no.b.a][0]>dist[no.b.a][no.b.b]){ dist[no.b.a][0]=dist[no.b.a][no.b.b]; ac.push({-dist[no.b.a][0],{no.b.a,0}}); } } } cout<<dist[endd][0]<<endl; return 0; }

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:56:13: warning: 'st' may be used uninitialized in this function [-Wmaybe-uninitialized]
  dist[st][0]=0;
  ~~~~~~~~~~~^~
skyscraper.cpp:92:20: warning: 'endd' may be used uninitialized in this function [-Wmaybe-uninitialized]
  cout<<dist[endd][0]<<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...