제출 #1283161

#제출 시각아이디문제언어결과실행 시간메모리
1283161zagaroJakarta Skyscrapers (APIO15_skyscraper)C++20
57 / 100
1100 ms124768 KiB
#include<bits/stdc++.h> #include<ext/pb_ds/assoc_container.hpp> /**zagaro & lauren <3**/ #define mod 1000000007 //1e9 + 7 #define pi acos(-1) #define wl while #define str string #define ENDL "\n" #define sal ' ' #define tp_set ll #define prc(n) cout.precision(n);cout<<fixed; #define ord_set tree<tp_set, null_type, less<tp_set>, rb_tree_tag, tree_order_statistics_node_update> typedef long long ll; typedef bool bl; typedef char car; using namespace std; using namespace __gnu_pbds; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); ll n, m, a, b, x, y, nod, val, pas; cin>>n>>m; vector<vector<ll> > vec(n+1); vector<map<ll,ll> > dis(n+1); cin>>a>>b; vec[a].push_back(b); cin>>b>>x; for(int i=3;i<=m;i++){ cin>>x>>y; vec[x].push_back(y); } if(a == b){ cout<<0<<ENDL; return 0; } queue<tuple<ll,ll,ll> > pq; for(int i=0;i<vec[a].size();i++){ dis[a][vec[a][i]] = 1; pq.push({1, a-vec[a][i], -vec[a][i]}); pq.push({1, a+vec[a][i], vec[a][i]}); } wl(!pq.empty() && dis[b].size() == 0){ tie(val, nod, pas) = pq.front(); pq.pop(); if(nod < 0 || nod >= n)continue; if(dis[nod][abs(pas)] != 0)continue; else { dis[nod][abs(pas)] = val; pq.push({val+1, nod+pas, pas}); for(int i=0;i<vec[nod].size();i++){ if(vec[nod][i] != abs(pas)){ dis[nod][vec[nod][i]] = val; pq.push({val+1, nod-vec[nod][i], -vec[nod][i]}); pq.push({val+1, nod+vec[nod][i], vec[nod][i]}); } } } } if(dis[b].size() == 0)cout<<"-1\n"; else cout<<(*dis[b].begin()).second<<ENDL; 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...