제출 #531147

#제출 시각아이디문제언어결과실행 시간메모리
531147HanksburgerJakarta Skyscrapers (APIO15_skyscraper)C++17
57 / 100
1111 ms229632 KiB
#include <bits/stdc++.h> using namespace std; int edge[21000005], nxt[21000005], lnk[10500005], dist[10500005], a[30005][175], n, m, s, t, sz, cnt; deque<int> deq; void add(int u, int v, int w) { cnt++; edge[cnt]=v*2+w; nxt[cnt]=lnk[u]; lnk[u]=cnt; } int main() { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; sz=n; for (int i=0; i<m; i++) { int b, p; cin >> b >> p; if (i==0) s=b; else if (i==1) t=b; if (p*p<=m) { if (!a[b][p]) { a[b%p][p]=sz; sz++; add(a[b%p][p], b%p, 0); for (int j=b%p+p; j<n; j+=p) { a[j][p]=sz; sz++; add(a[j][p], j, 0); add(a[j][p], a[j-p][p], 1); add(a[j-p][p], a[j][p], 1); } } add(b, a[b][p], 0); } else { int prev=b; for (int j=b-p; j>=0; j-=p) { add(prev, sz, 1); add(sz, j, 0); prev=sz; sz++; } prev=b; for (int j=b+p; j<n; j+=p) { add(prev, sz, 1); add(sz, j, 0); prev=sz; sz++; } } } for (int i=0; i<sz; i++) dist[i]=1e9; dist[s]=0; deq.push_back(s); while (!deq.empty()) { int u=deq.front(), cur; deq.pop_front(); cur=lnk[u]; while (cur) { int v=edge[cur]>>1, w=edge[cur]&1; if (dist[v]==1e9) { dist[v]=dist[u]+w; if (w) deq.push_back(v); else deq.push_front(v); } cur=nxt[cur]; } } if (dist[t]==1e9) cout << -1; else cout << dist[t]; 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...