제출 #1275712

#제출 시각아이디문제언어결과실행 시간메모리
1275712random_user27Jakarta Skyscrapers (APIO15_skyscraper)C++20
36 / 100
702 ms327680 KiB
// In The Name Of God #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef long double ld; typedef pair<int,int> pii; typedef pair<ll,ll> pll; #define pb push_back #define endl '\n' #define test(x) cout<<x,exit(0) #define fast (ios_base::sync_with_stdio(false),cin.tie(NULL)) const int maxn=3e4+10; const int inf=1e9; const int sq=100; int is_have[maxn][sq+5]; int dis[maxn]; int mark[maxn]; vector<int>vec[maxn]; int n,m; int main(){ fast; cin>>n>>m; int start,en; for(int i=1;i<=m;i++){ int b,p;cin>>b>>p; if(i==1){ start=b; } if(i==2){ en=b; } vec[b].pb(p); if(p<=sq){ is_have[b][p]=1; } } priority_queue<pii, vector<pii>, greater<pii>> st; for(int i=0;i<n;i++){ dis[i]=inf; st.push({inf,i}); } dis[start]=0; st.push({0,start}); while(st.size()>0){ int v=st.top().second; st.pop(); if(mark[v]==1){ continue; } mark[v]=1; for(int i=0;i<vec[v].size();i++){ int p=vec[v][i]; if(p>sq){ for(int j=v+p;j<n;j+=p){ dis[j]=min(dis[j],dis[v]+(j-v)/p); st.push({dis[j],j}); } for(int j=v-p;j>=0;j-=p){ dis[j]=min(dis[j],dis[v]+(v-j)/p); st.push({dis[j],j}); } } else{ for(int j=v+p;j<n;j+=p){ dis[j]=min(dis[j],dis[v]+(j-v)/p); st.push({dis[j],j}); if(is_have[j][p]==1){ break; } } for(int j=v-p;j>=0;j-=p){ dis[j]=min(dis[j],dis[v]+(v-j)/p); st.push({dis[j],j}); if(is_have[j][p]==1){ break; } } } } } if(dis[en]>1e7){ cout<<-1<<endl; } else{ cout<<dis[en]<<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...