Submission #77029

#TimeUsernameProblemLanguageResultExecution timeMemory
77029vexJakarta Skyscrapers (APIO15_skyscraper)C++14
100 / 100
223 ms80948 KiB
#include <bits/stdc++.h> #define maxn 30005 #define pii pair<int,int> #define f first #define s second using namespace std; int n,m; pii dg[maxn]; pii sdg[maxn]; vector<int>p[maxn]; vector<pii>adj[maxn]; priority_queue<pii>pq; int dis[maxn]; bool bio[maxn]; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); cin>>n>>m; int s; int e; for(int i=0;i<m;i++) { int x,y; cin>>x>>y; sdg[i].f=y; sdg[i].s=x; if(i==0)s=x; if(i==1)e=x; } sort(sdg,sdg+m); int br=0; for(int i=0;i<m;i++) { if(i==0 || sdg[i]!=sdg[i-1]) { dg[br].f=sdg[i].s; dg[br].s=sdg[i].f; br++; } } m=br; for(int i=0;i<m;i++)p[dg[i].s].push_back(dg[i].f); for(int i=1;i<n;i++)sort(p[i].begin(),p[i].end()); for(int i=0;i<m;i++) { int pp=0; int sz=p[dg[i].s].size(); while(p[dg[i].s][pp]!=dg[i].f)pp++; int up=pp+1; for(int j=dg[i].f+dg[i].s;j<n;j+=dg[i].s) { while(up<sz && p[dg[i].s][up]<j)up++; adj[dg[i].f].push_back({j,(j-dg[i].f)/dg[i].s}); if(up<sz && p[dg[i].s][up]==j)break; } pp--; for(int j=dg[i].f-dg[i].s;j>=0;j-=dg[i].s) { while(pp>=0 && p[dg[i].s][pp]>j)pp--; adj[dg[i].f].push_back({j,(dg[i].f-j)/dg[i].s}); if(pp>=0 && p[dg[i].s][pp]==j)break; } } /*for(int i=0;i<n;i++) { cout<<i<<" "; for(auto x:adj[i])cout<<x.f<<","<<x.s<<" "; cout<<endl; }*/ if(e==s) { cout<<"0"<<endl; return 0; } for(int i=0;i<n;i++) { dis[i]=maxn*maxn+55; bio[i]=false; } pq.push({0,s}); dis[s]=0; while(!pq.empty()) { int v=pq.top().second; pq.pop(); if(v==e) { cout<<dis[e]<<endl; return 0; } if(bio[v])continue; bio[v]=true; for(auto x:adj[v]) { int u=x.f; int w=x.s; if(dis[u]>dis[v]+w) { dis[u]=dis[v]+w; pq.push({-dis[u],u}); } } } cout<<"-1"<<endl; return 0; }

Compilation message (stderr)

skyscraper.cpp: In function 'int main()':
skyscraper.cpp:98:8: warning: 'e' may be used uninitialized in this function [-Wmaybe-uninitialized]
        if(v==e)
        ^~
#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...