Submission #1023132

#TimeUsernameProblemLanguageResultExecution timeMemory
1023132MarwenElarbiJakarta Skyscrapers (APIO15_skyscraper)C++17
100 / 100
750 ms38360 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC optimize("O3") #pragma GCC optimize("unroll-loops") #pragma GCC optimize("Ofast,no-stack-protector") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,tune=native") #define ll long long #define fi first #define se second #define pb push_back mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); const int nax=3e4+5; vector<int> adj[nax]; int dis[nax][300]; signed main(){ iostream::sync_with_stdio(false); int n,m; cin>>n>>m; pair<int,int> fir; pair<int,int> end; for (int i = 0; i < m; ++i) { int x,y; cin>>x>>y; if(i==0) fir={x,y}; if(i==1) end={x,y}; adj[x].pb(y); } for (int i = 0; i < n; ++i) { for (int j = 0; j < 300; ++j) { dis[i][j]=1e9; } } dis[fir.fi][0]=0; priority_queue<tuple<int,int,int>,vector<tuple<int,int,int>>,greater<tuple<int,int,int>>> pq; pq.push({0,fir.fi,0}); while(!pq.empty()){ auto [d , node , lst] = pq.top(); pq.pop(); if(node==end.fi){ cout <<d<<endl; return 0; } if(dis[node][lst]<d) continue; for(auto u:adj[node]){ if(u<300){ if(node-u>=0){ if(dis[node-u][u]>d+1){ dis[node-u][u]=d+1; pq.push({d+1,node-u,u}); } }if(node+u<n){ if(dis[node+u][u]>d+1){ dis[node+u][u]=d+1; pq.push({d+1,node+u,u}); } } }else{ for (int i = 1; i < n; ++i) { if(u*i+node>=n) break; if(dis[node+u*i][0]>d+i){ dis[node+u*i][0]=d+i; pq.push({d+i,node+u*i,0}); } } for (int i = 1; i < n; ++i) { if(node-u*i<0) break; if(dis[node-u*i][0]>d+i){ dis[node-u*i][0]=d+i; pq.push({d+i,node-u*i,0}); } } } } if(lst!=0){ if(node-lst>=0){ if(dis[node-lst][lst]>d+1){ dis[node-lst][lst]=d+1; pq.push({d+1,node-lst,lst}); } }if(node+lst<n){ if(dis[node+lst][lst]>d+1){ dis[node+lst][lst]=d+1; pq.push({d+1,node+lst,lst}); } } } } cout <<-1<<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...