제출 #969816

#제출 시각아이디문제언어결과실행 시간메모리
969816pccJakarta Skyscrapers (APIO15_skyscraper)C++17
22 / 100
151 ms197504 KiB
#include <bits/stdc++.h> using namespace std; #pragma GCC target("avx2,popcnt,sse4") #pragma GCC optimize("O3,unroll-loops") #define ll long long #define pll pair<ll,ll> #define pii pair<int,int> #define fs first #define sc second #define tlll tuple<ll,ll,ll> const int inf = 1e9; const int mxn = 3e4+10; const int mxe = mxn*sqrt(mxn)*3; const int mxv = mxe; map<pii,vector<int>> mp; int N,M; int ecnt,vcnt; int to[mxe],nid[mxe]; bitset<mxv> wei; int head[mxv]; int dist[mxv]; int S,T; int ts; void add_edge(int a,int b,int w){ ecnt++; nid[ecnt] = head[a]; to[ecnt] = b; wei[ecnt] = w; head[a] = ecnt; } bitset<mxv> done; deque<int> dq; void BFS(){ dq.resize(mxv*2); fill(dist,dist+mxv,inf); dist[S] = 0; dq.push_back(S); while(!dq.empty()){ int now = dq.front(); dq.pop_front(); if(done[now])continue; if(now == T)break; done[now] = true; for(int eid = head[now];eid;eid = nid[eid]){ int nxt = to[eid],w = wei[eid]; //cout<<now<<' '<<nxt<<":"<<dist[now]+w<<' '<<dist[nxt]<<endl; if(!w){ if(dist[nxt]>dist[now]){ dist[nxt] = dist[now]; dq.push_front(nxt); } } else{ if(dist[nxt]>dist[now]+w){ dist[nxt] = dist[now]+w; dq.push_back(nxt); } } } } return; } int main(){ ts = clock(); ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>N>>M; for(int i = 0;i<M;i++){ pii tmp; cin>>tmp.fs>>tmp.sc; mp[pii(tmp.sc,tmp.fs%tmp.sc)].push_back(tmp.fs); if(!i)S = tmp.fs; if(i == 1)T = tmp.fs; } vcnt = N-1; for(auto &i:mp){ sort(i.sc.rbegin(),i.sc.rend()); for(int j = i.fs.sc;j<N;j+=i.fs.fs){ vcnt++; add_edge(vcnt,j,0); while(!i.sc.empty()&&i.sc.back() == j){ add_edge(i.sc.back(),vcnt,0); i.sc.pop_back(); } if(j != i.fs.sc){ add_edge(vcnt-1,vcnt,1); add_edge(vcnt,vcnt-1,1); } } } BFS(); cout<<(dist[T]>=inf?-1:dist[T])<<'\n'; 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...