Submission #59700

#TimeUsernameProblemLanguageResultExecution timeMemory
59700liwiJakarta Skyscrapers (APIO15_skyscraper)C++11
100 / 100
767 ms16468 KiB
#include <bits/stdc++.h> using namespace std; int num_buildings, num_dogs, target; int dis[30000]; unordered_set<int> buildings[30000]; int main(int argc, const char * argv[]) { int start = 0; cin>>num_buildings>>num_dogs; for(int i=0; i<num_dogs; i++){ int b, p; cin>>b>>p; buildings[b].insert(p); if(i == 0) start = b; if(i == 1) target = b; } memset(dis,0x3f,sizeof dis); dis[start] = 0; priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> q; q.push({0,start}); while(!q.empty()){ int current_building = q.top().second; q.pop(); if(current_building == target) continue; for(int check:buildings[current_building]){ for(int i=1; i*check+current_building<num_buildings; i++){ int next_building = i*check+current_building; if(dis[next_building] > dis[current_building]+i){ dis[next_building] = dis[current_building]+i; q.push({dis[next_building],next_building}); if(binary_search(buildings[next_building].begin(),buildings[next_building].end(),check)) break; } } for(int i=1; current_building-i*check>=0; i++){ int next_building = current_building-i*check; if(dis[next_building] > dis[current_building]+i){ dis[next_building] = dis[current_building]+i; q.push({dis[next_building],next_building}); if(binary_search(buildings[next_building].begin(),buildings[next_building].end(),check)) break; } } } } cout<<(dis[target]==0x3f3f3f3f?-1:dis[target]); 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...