Submission #533090

#TimeUsernameProblemLanguageResultExecution timeMemory
533090new_accJakarta Skyscrapers (APIO15_skyscraper)C++14
100 / 100
292 ms218468 KiB
#include<bits/stdc++.h> #define fi first #define se second using namespace std; typedef long long ll; typedef vector<int> vi; typedef vector<ll> vl; const int N=3e4+10; vector<pair<int,short> > graf[N*20]; pair<short,short>w[N]; int l,num[N]; vector<short> li[300]; bitset<N>bb; bitset<N*20>vis; vi kol[1000*1000*4+10]; int n,m; void single(int x){ if(li[x].empty()) return; for(int i=1;i<=x;i++){ num[i]=++l; graf[l].push_back({i,0}); } for(int i=x+1;i<=n;i++){ num[i]=++l; graf[l].push_back({i,0}),graf[l].push_back({num[i-x],1}); } for(int i=1;i<=n;i++) bb[i]=0; for(auto u:li[x]) bb[w[u].fi]=1; for(int i=1;i<=n;i++) if(bb[i]) graf[i].push_back({num[i],0}); for(int i=n;i>=n-x+1;i--){ num[i]=++l; graf[l].push_back({i,0}); } for(int i=n-x;i>=1;i--){ num[i]=++l; graf[l].push_back({i,0}),graf[l].push_back({num[i+x],1}); } for(int i=1;i<=n;i++) if(bb[i]) graf[i].push_back({num[i],0}); } int Dijkstra(int p,int k){ kol[0].push_back(p); for(int i=0;i<=(int)4e6;i++){ for(int j=0;j<kol[i].size();j++){ int v=kol[i][j]; if(vis[v]) continue; vis[v]=1; if(v==k) return i; for(auto u:graf[v]) if(!vis[u.fi] and i+u.se<=(int)4e6) kol[i+u.se].push_back(u.fi); } } return -1; } void solve(){ cin>>n>>m; l=n; int p=sqrt(n)/20; for(int i=1;i<=m;i++){ cin>>w[i].fi>>w[i].se; w[i].fi++; if(w[i].se>p){ for(int j=w[i].fi+w[i].se;j<=n;j+=w[i].se) graf[w[i].fi].push_back({j,(j-w[i].fi)/w[i].se}); for(int j=w[i].fi-w[i].se;j>=1;j-=w[i].se) graf[w[i].fi].push_back({j,(w[i].fi-j)/w[i].se}); }else li[w[i].se].push_back(i); } for(int i=1;i<=p;i++) single(i); cout<<Dijkstra(w[1].fi,w[2].fi)<<"\n"; } int main(){ ios_base::sync_with_stdio(0),cin.tie(0); solve(); }

Compilation message (stderr)

skyscraper.cpp: In function 'int Dijkstra(int, int)':
skyscraper.cpp:43:16: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   43 |   for(int j=0;j<kol[i].size();j++){
      |               ~^~~~~~~~~~~~~~
#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...