Submission #1283168

#TimeUsernameProblemLanguageResultExecution timeMemory
1283168zagaroJakarta Skyscrapers (APIO15_skyscraper)C++20
100 / 100
175 ms114512 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<vector<bl> > dis(n+1, vector<bl> (30010, false)); vector<bl> vis(n+1, false); 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]] = true; vis[a]=true; pq.push({1, a-vec[a][i], -vec[a][i]}); pq.push({1, a+vec[a][i], vec[a][i]}); } wl(!pq.empty() && !vis[b]){ tie(val, nod, pas) = pq.front(); pq.pop(); if(nod < 0 || nod >= n)continue; if(dis[nod][abs(pas)])continue; else { dis[nod][abs(pas)] = true; pq.push({val+1, nod+pas, pas}); if(!vis[nod]){ vis[nod] = true; for(int i=0;i<vec[nod].size();i++){ if(vec[nod][i] != abs(pas)){ dis[nod][vec[nod][i]] = true; pq.push({val+1, nod-vec[nod][i], -vec[nod][i]}); pq.push({val+1, nod+vec[nod][i], vec[nod][i]}); } } } } } if(!vis[b])cout<<"-1\n"; else cout<<val<<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...