제출 #482594

#제출 시각아이디문제언어결과실행 시간메모리
482594beaconmcJakarta Skyscrapers (APIO15_skyscraper)C++14
100 / 100
196 ms67756 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> int n,m; int a,b,baka,imposter,sus, countz,sussy; vector<pair<int, int>> edges[30000]; set <int> stuff[30000]; int dists[30001]; int main(){ FOR(i, 0, 30001){ dists[i] = 2147483647; } 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(make_pair(sus, countz)); if (stuff[sus].find(i) != stuff[sus].end()) break; } sus = k; countz = 0; while ((sus-sussy)>=0){ sus -= sussy; countz++; edges[k].push_back(make_pair(sus, countz)); if (stuff[sus].find(i) != stuff[sus].end()) break; } } } int src=imposter; priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; dists[src] = 0; pq.push({0, src}); while (pq.size()) { int cdist, node; pair<int, int> suz = pq.top(); cdist = suz.first; node=suz.second; pq.pop(); if (cdist != dists[node]) continue; for (auto& i : edges[node]) { if (cdist+i.second < dists[i.first]) { pq.push({dists[i.first] = cdist+i.second, i.first}); } } } if (dists[baka] != 2147483647){ 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...