제출 #761724

#제출 시각아이디문제언어결과실행 시간메모리
761724ByeWorldJakarta Skyscrapers (APIO15_skyscraper)C++17
0 / 100
3 ms3888 KiB
#include <bits/stdc++.h> #pragma GCC optimize("O3") #define ll long long #define fi first #define se second #define pb push_back #define lb lower_bound #define ub upper_bound using namespace std; const int MAXN = 3e4+10; const double SMALL = 1e-6; const ll INF = 1e18+10; const int MOD = 1e9+7; typedef pair<int,int> pii; typedef pair<ll, pii> ipii; bitset <MAXN> ma[MAXN]; int b[MAXN], p[MAXN]; bitset <MAXN> vis; unordered_map <int, ll> tot[MAXN]; vector <int> ed[MAXN]; int n, m; priority_queue <ipii, vector<ipii>, greater<ipii>> pq; void dji(){ tot[b[0]][p[0]] = -INF; pq.push(ipii(-INF, pii(b[0], p[0]))); while(!pq.empty()){ ll dis = pq.top().fi; int nw = pq.top().se.fi; int jump = pq.top().se.se; //cout << dis << ' ' << nw << ' ' << jump << "p\n"; pq.pop(); if(dis >= tot[nw][jump]) continue; if(!vis[nw]){ vis[nw] = 1; for(auto nx : ed[nw]){ // ke k lain if(tot[nw][nx] > dis){ //gk nambah lompat tot[nw][nx] = dis; pq.push(ipii(dis, pii(nw, nx))); } } } if(nw-jump >= 0 && tot[nw-jump][jump] > dis+1){ tot[nw-jump][jump] = dis+1; pq.push(ipii(dis+1, pii(nw-jump, jump))); } if(nw+jump <= n-1 && tot[nw+jump][jump] > dis+1){ tot[nw+jump][jump] = dis+1; pq.push(ipii(dis+1, pii(nw+jump, jump))); } } ll ans = INF; for(int i=1; i<=30000; i++) ans = min(ans, tot[b[1]][i]+INF); if(ans != INF) cout << ans << '\n'; else cout << "-1\n"; } signed main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n >> m; for(int i=0; i<=m-1; i++){ cin >> b[i] >> p[i]; } for(int i=0; i<=m-1; i++){ if(ma[b[i]][p[i]] == 1) continue; ma[b[i]][p[i]] = 1; ed[b[i]].pb(p[i]); } dji(); }
#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...