제출 #393796

#제출 시각아이디문제언어결과실행 시간메모리
393796loctildoreJakarta Skyscrapers (APIO15_skyscraper)C++14
57 / 100
1089 ms35504 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define f first #define s second #define x first #define y second #define elif else if #define endl '\n' #define all(x) begin(x), end(x) #define k 100 template <typename T> ostream& operator << (ostream& os, const vector<T>& a) { os << '['; bool E = false; for(const T& x : a) { if(E) os << ' '; os << x; E = true; } return os << ']'; } int n,m; int b[30069],p[30069]; bool done[30069]; set<pair<int,int>> st; vector<int> grph[30069]; priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>> pq; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cin>>n>>m; for (int i = 0; i < m; i++) { cin>>b[i]>>p[i]; grph[b[i]].push_back(p[i]); } pq.push({0,b[0]}); while (pq.size()) { auto temp=pq.top(); pq.pop(); if (done[temp.s]) { continue; } done[temp.s]=true; if (temp.s==b[1]) { cout<<temp.f<<endl; return 0; } for (int i:grph[temp.s]) { if (st.find({temp.s%i,i})!=st.end()) { continue; } st.insert({temp.s%i,i}); for (int j = temp.s%i; j < n; j+=i) { pq.push({temp.f+abs(j-temp.s)/i,j}); } } } cout<<-1<<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...