제출 #124138

#제출 시각아이디문제언어결과실행 시간메모리
124138MtaylorJakarta Skyscrapers (APIO15_skyscraper)C++14
10 / 100
24 ms23928 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef vector<ll> vl ; #define mp make_pair #define pb push_back #define f first #define s second #define all(v) (v).begin(),(v).end() const int MOD = 1000000007; const int N = 1000005; const double PI =4*atan(1); const double eps = 1e-7; ll n,m; ll x,y; vl tab[N]; ll p[N]; ll b[N]; bool vis[N]; unordered_map<ll ,ll> maa; ll ans=-1; void bfs(ll u){ queue<pair<ll,ll> > pq; for(auto t:tab[u]){ pq.push(mp(0,u*50000 + p[t])); } vis[u]=1; pair<ll,ll> ras; while(!pq.empty()){ ras=pq.front(); pq.pop(); ll x=ras.s/50000; ll y=ras.s%50000; if(x==b[1]){ ans=max(ans,-ras.f); return ; } ll z; //cout << x << " " << y << endl; if(vis[x]==0){ for(auto t: tab[x]){ z=maa[x*50000+p[t]]; if(z==0){ if(x+p[t]<n)pq.push(mp(ras.f-1,(x+p[t])*50000+p[t] )); if(x-p[t]>=0)pq.push(mp(ras.f-1,(x-p[t])*50000+p[t] )); if(x-p[t]>=0)maa[(x-p[t])*50000+p[t]]=1; if(x+p[t]<n)maa[(x+p[t])*50000+p[t]]=1; } } vis[x]=1; } z=maa[50000*(x+y)+y]; if(x+y <n && z==0){ maa[50000*(x+y)+y]=-ras.f+1; if(x+y == b[1]){ ans=max(ans,-ras.f+1); continue;; } pq.push(mp(ras.f-1,50000*(x+y)+y)); } z=maa[50000*(x-y)+y]; if(x-y >=0 && z==0){ maa[50000*(x-y)+y]=-ras.f+1; if(x-y == b[1]){ ans=max(ans,-ras.f+1); continue; } pq.push(mp(ras.f-1,50000*(x-y)+y)); } //cout << x << endl; } } int main(){ ios::sync_with_stdio(0); //freopen("easy.txt","r",stdin); cin >> n >>m ; for(int i=0;i<m;i++){ cin >> x >> y; p[i]=y; b[i]=x; tab[x].pb(i); } //cout << b[0]<< endl; bfs(b[0]); cout << ans; return 0; }
#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...