제출 #482562

#제출 시각아이디문제언어결과실행 시간메모리
482562beaconmcJakarta Skyscrapers (APIO15_skyscraper)C++14
22 / 100
246 ms224416 KiB
#include <bits/stdc++.h> typedef long long ll; #define FOR(i, x, y) for(ll i=x; i<y; i++) using namespace std; #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace __gnu_pbds; #define ordered_set tree<ll, null_type,greater_equal<int>, rb_tree_tag,tree_order_statistics_node_update> ll n,m; ll a,b,baka,imposter,sus, countz,sussy; vector<vector<ll> > edges[30001]; set <ll> stuff[30001]; ll dists[30001]; int main(){ FOR(i, 0, 30001){ dists[i] = 1000000000000; } cin >> n>>m; FOR(i, 0, m){ cin >> a >> b; if(i==0) imposter = a; if (i==1) baka = a; stuff[a].insert(b); } FOR(k, 0, n){ for(auto&i : stuff[k]){ sus = k; sussy = i; countz = 0; while ((sus+sussy)<n){ sus += sussy; countz++; edges[k].push_back({sus, countz}); } sus = k; countz = 0; while ((sus-sussy)>0){ sus -= sussy; countz++; edges[k].push_back({sus, countz}); } } } ll src=imposter; priority_queue<vector<ll>,vector<vector<ll>>, greater<vector<ll>>> pq; dists[src] = 0; pq.push({0, src}); while (pq.size()) { vector<ll> suz = pq.top(); ll cdist, node; pq.pop(); cdist = suz[0];node=suz[1]; if (cdist != dists[node]) continue; for (auto& i : edges[node]) { if (cdist+i[1] < dists[i[0]]) { pq.push({dists[i[0]] = cdist+i[1], i[0]}); } } } if (dists[baka] != 1000000000000){ cout << dists[baka]; }else{ cout << -1; } }
#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...