Submission #679725

#TimeUsernameProblemLanguageResultExecution timeMemory
679725abcvuitunggioJakarta Skyscrapers (APIO15_skyscraper)C++17
100 / 100
123 ms10692 KiB
#include <iostream> #include <queue> #include <vector> #include <algorithm> #define int long long using namespace std; const int INF=1e18; priority_queue <pair <int, int>, vector <pair <int, int>>, greater <pair <int, int>>> q; int n,m,b,p,s,t,d[50001]; vector <int> ke[50001]; int32_t main(){ ios_base::sync_with_stdio(NULL);cin.tie(nullptr); cin >> n >> m; for (int i=0;i<m;i++){ cin >> b >> p; ke[b].push_back(p); if (!i) s=b; if (i==1) t=b; } for (int i=0;i<n;i++){ d[i]=INF; sort(ke[i].begin(),ke[i].end()); ke[i].resize(unique(ke[i].begin(),ke[i].end())-ke[i].begin()); } q.push({0,s}); d[s]=0; while (!q.empty()){ int u=q.top().second,du=q.top().first; q.pop(); if (d[u]!=du) continue; for (int p:ke[u]){ for (int v=u+p;v<n;v+=p){ if (d[v]>d[u]+(v-u)/p){ d[v]=d[u]+(v-u)/p; q.push({d[v],v}); } int pos=lower_bound(ke[v].begin(),ke[v].end(),p)-ke[v].begin(); if (pos<ke[v].size()&&ke[v][pos]==p) break; } for (int v=u-p;v>=0;v-=p){ if (d[v]>d[u]+(u-v)/p){ d[v]=d[u]+(u-v)/p; q.push({d[v],v}); } int pos=lower_bound(ke[v].begin(),ke[v].end(),p)-ke[v].begin(); if (pos<ke[v].size()&&ke[v][pos]==p) break; } } } cout << (d[t]==INF?-1:d[t]); }

Compilation message (stderr)

skyscraper.cpp: In function 'int32_t main()':
skyscraper.cpp:41:24: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   41 |                 if (pos<ke[v].size()&&ke[v][pos]==p)
      |                     ~~~^~~~~~~~~~~~~
skyscraper.cpp:50:24: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   50 |                 if (pos<ke[v].size()&&ke[v][pos]==p)
      |                     ~~~^~~~~~~~~~~~~
#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...